私の苦境への答えを探してかなりの時間を費やし、Java教科書のジェネリックスの章を読み直したにもかかわらず、次のコードの問題を修正できないようです。
public class RedBlackTree<I extends Comparable>
{
private int count = 0;
private RedBlackNode root;
private RedBlackNode current;
private RedBlackNode[] stack;
/**
* Inner class used for representing the nodes of the red-black balanced binary search tree object.
*/
private class RedBlackNode implements Comparable
{
private I id;
private boolean is_btree;
private RedBlackNode[] links;
/**
* Constructor for objects of the RedBlackNode class.
*
* @param id The ID of the node.
*/
private RedBlackNode(I id)
{
if (id == null)
{
throw new NullPointerException("ID cannot be null.");
}
this.id = id;
this.is_btree = true;
}
/**
* Function for comparing the RedBlackNode object to another object.
*
* @param obj The object to be compared.
* @return If invocant > passed, returns 1; if invocant < passed, returns -1; if invocant = passed, returns 0.
*/
private int compareTo(Object obj)
{
if (obj instanceof RedBlackTree.RedBlackNode)
{
RedBlackNode node = (RedBlackNode)obj;
int result = id.compareTo(node.id);
return result > 0 ? 1 : result < 0 ? -1 : 0;
}
else
{
throw new ClassCastException("Expected a RedBlackNode object.");
}
}
}
}
特に、次のメッセージを含むポップアップが表示されます。
Warnings from last compilation
C:\Users\...\RedBlackTree.java uses unchecked or unsafe operations.
Recompile with -Xlint:unchecked for details.
ここにあるIまたはComparableのほぼすべての組み合わせは、依然としてそのようなポップアップにつながります。私はプログラミングにBlueJ環境を使用していますが、これにより、詳細を表示するために関連するコンパイラー引数を組み込むことができなくなります。
これまでの調査からわかる限り、これは内部クラスがIジェネリック型を利用しているため、「RedBlackNodeはComparableを実装している」という事実と関係があり、RedBlackNode内部クラスのcompareToメソッドはそれに対処する必要があります。どういうわけか事実。
この質問はstackoverflowやその他の場所で何度も質問され、何度も回答されていることは知っていますが、これらのインスタンスから学んだことを自分のケースに適用することはできないようです。私はジェネリックスにかなり慣れていないので、ここで私が得ることができるどんな助けも非常にありがたいです!