Re: Question on Generics Syntax
Ricardo Palomares Mart?nez wrote:
Hi,
I'm going crazy with the proper syntax of Collections.binarySearch():
http://java.sun.com/javase/6/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T,%20java.util.Comparator)
I've been searching Google and Google Groups for similar questions,
but, while this question has been asked before, the answers don't seem
to apply to my case. This is my code:
import java.util.Collections;
public class Glossary {
final private List<GlossaryTerm> gList;
public Glossary() {
this.gList = new ArrayList<GlossaryTerm>();
}
public void addGlossaryTerm(String original, String comment) {
GlossaryTerm gt = new GlossaryTerm(original, comment);
if (Collections.binarySearch(gList, gt) < 0) {
gList.add(gt);
}
}
}
On compiling, I get this error:
....Glossary.java:107: cannot find symbol
symbol : method
binarySearch(java.util.List<net.localizethat.datamodel.GlossaryTerm>,net.localizethat.datamodel.GlossaryTerm)
location: class java.util.Collections
if (Collections.binarySearch(gList, gt) < 0) {
Start with what the error says, namely that it cannot find the method. (BTW,
there is never any 107 lines of code in your Usenet post. Often it's better
to send complete examples
<http://www.physci.org/codes/sscce.html>
but I think we can make do here.)
Is net.localizethat.datamodel the package for class Glossary, too? It'd
better be.
The Javadocs
<http://java.sun.com/javase/6/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)>
say that the first binarySearch() argument has to be of type
List<? extends Comparable<? super T>>
That means GlossaryTerm has to implement Comparable<? super GlossaryTerm>.
<http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html>
Does it?
And once you fix that, how well is binarySearch() going to work with an
unsorted list? (Hint: This issue is mentioned in the Javadocs, too.)
Always, always, always turn to the Javadocs for insight on API issues.
--
Lew