これらの2つの構文の違いは、コードを呼び出す必要がある(外部でもなくても)場合があります。
要するに、最初のコードでは呼び出し元がジェネリックスを利用できるようになり、2番目のコードではジェネリックスを利用できなくなります。これは、treeNode
フィールドまでしかありません。
は、ツリー/オブジェクト(完全に仮想的な)を取得するためにあなたの顧客のためのメソッドを追加することであったと想定します
最初のバージョンは次のようになります。
public class HW3<E> {
private Tree<E> treeNode = new Tree <E>();
public E getNodeData();
最初のケースでは、あなたのクライアントはあなたを呼び出すことができますコードをキャストする必要はありません。
MW3<SomeType> hw3 = ...//create instance
SomeType data = hw3.getNodeData();
Javaはこれとジェネリックについて知っているので、キャストを避けることができます。
セカンドバージョンがなければならないであろう:、ジェネリックを使用して、オブジェクトを使用した場合、クライアントがキャストしなければならない、このバージョンとは異なり
public class HW3<E> {
private Tree<Object> treeNode = new Tree <Object>();
public Object getNodeData(); //You would have to do this because the field with data wouldn't know about the generic type
:つまり
MW3<SomeType> hw3 = ...//create instance
SomeType data = (SomeType) hw3.getNodeData();
、 E
タイプのパラメータは2番目の例では全く役に立たず、単純に使用しないでください。 私が使用した例では、あなたのTree
タイプは、いくつかの一般的なget
方法...詳細は
、java.util.ArrayList
ような、一般的なタイプの実装を見てみましょうを持っていると仮定。スニペットの主な違いは、タイプパラメータの使用方法と、発信者にそのメリットをどのように享受させるかです。
あなたが求めていることは私には少し不明です。 'E'と' Object'の違いについて質問していますか? – 4castle
はい、かなり。私はEとObjectが違うと思ったが、上記のようなものを使うと、エラーなく動作する。あるいは、 "E"と "Object"は同じものですか? – sbot