Code Snippet 2: This time in Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package org.openoffice.xmerge.merger; /** * This is an interface used by the {@link * org.openoffice.xmerge.merger.DiffAlgorithm * DiffAlgorithm} and {@link * org.openoffice.xmerge.merger.MergeAlgorithm * MergeAlgorithm} to access a <code>Document</code>. * * @author smak */ public interface Iterator { /** * Move to next element in the sequence. * * @return The <code>Object</code> of the next element in the sequence. * If there is no next element, then return null. */ public Object next(); /** * Move to previous element in the sequence. * * @return The <code>Object</code> of the previous element in the sequence. * If there is no previous element, then return null. */ public Object previous(); /** * Move to the beginning of the sequence. * * @return The <code>Object</code> of the first element in the sequence. * If it is empty, then return null. */ public Object start(); /** * Move to the end of the sequence. * * @return The <code>Object</code> of the last element in the sequence. * If it is empty, then return null. */ public Object end(); /** * Return the current element <code>Object</code> content. * * @return The <code>Object</code> at current position. */ public Object currentElement(); /** * Return the total element count in the sequence. * * @return The total element count. */ public int elementCount(); /** * A method to allow the difference algorithm to test whether the * <code>obj1</code> and <code>obj2</code> in the * <code>Iterator</code> are considered equal. As not every * <code>Object</code> in the <code>Iterator</code> can implement its * own equal method, with this equivalent method, we can allow * flexibility for the <code>Iterator</code> to choose a custom way * to compare two objects. Two objects can even be compared based on * the position in the <code>Iterator</code> rather than by * the content via this option. * * @param obj1 The first <code>Object</code>. * @param obj2 The second <code>Object</code>. * * @return true if equal, false otherwise. */ public boolean equivalent(Object obj1, Object obj2); /** * <p>A method to force the <code>Iterator</code> to transverse the tree * again to refresh the content.</p> * * <p>It is used mainly for <code>Iterator</code> objects which take a snap * shot instead of dynamically transversing the tree. The current * position will be set to the beginning.</p> */ public void refresh(); } |
Here’s another one, randomly chosen from the source for Apache OpenOffice’s 800K lines of Java (I should point out that there are something like 10M lines of C++ in the project).
A few seconds makes it clear that this is … the iterator interface. Minus the horrible “remove” call, and plus a bunch of other ones, generally fairly inoffensive.
Honestly, I can’t say too many bad things about this file: it’s clear and useful; this is the kind of file you’d like to see when you go looking for information. I had hoped for something more… complex? But the random number generator does what it wants. Darn random number generator!
One point here is that I probably shouldn’t have excluded .h files from my random C file excerpt; in Java, interface files aren’t distinguished from “source” files in the same way they are in C.