I'm trying to implement a Binary Search Tree, just for the sake of learning, and I want the tree to be generic. This is the code I have so far (very limited):
package lect1;
public class BinNode {
Comparable element;
BinNode left;
BinNode right;
public BinNode find(Comparable obj) {
if (element == null) {
return null;
} else if (obj.compareTo(left.element) < 0) {
left.find(obj);
} else if(obj.compareTo(right.element) > 0) {
right.find(obj);
} else {
return this;
}
return null;
}
public void insert(Comparable obj) {
}
}
However, I get the error message Unchecked call to 'compareTo(T)' as a member of raw type 'java.lang.Comparable'. Could any of you shed some light as to how I would solve this.

Comparable<T> is a generic type, but you're using the raw type, losing type safety. You probably want to make your BinNode generic too, in its element type:
public class BinNode<T extends Comparable<T>> {
private T element;
private BinNode<T> left;
private BinNode<T> right;
public BinNode<T> find(T obj) {
// TODO: Handle the cases where left or right is null
if (element == null) {
return null;
} else if (obj.compareTo(left.element) < 0) {
return left.find(obj);
} else if (obj.compareTo(right.element) > 0) {
return right.find(obj);
} else {
return this;
}
}
public void insert(T obj) {
}
}
The constraint on T then ensures that elements will be comparable with each other.
Note that I've also fixed your recursion - previously you were calling left.find() or right.find() but ignoring the return value.
See more on this question at Stackoverflow