2016-10-20 3 views
-1

を拡張している拡張やジェネリック、2番目のものは私に抽象メソッドを実装するよう強制します。ジェネリックは、私はこのアプローチが有効で見つける

public int intValue() { 
    throw new UnsupportedOperationException(); 
} 


public long longValue() { 
    throw new UnsupportedOperationException(); 
} 


public float floatValue() { 
    throw new UnsupportedOperationException(); 
} 


public double doubleValue() { 
    throw new UnsupportedOperationException(); 
} 

私はこのアプローチが有効で見つける感謝

+4

'Test 'がある場合、そのクラスにはT型の番号の変数が含まれていることを意味します。' Test extends Number'のように型varは役に立たず、テストクラスの型は 'Number'です – Ash

+0

この質問は奇妙です。あなたはどこでもTを使用しているようではなく、上記のAshが指摘したように、2つの選択肢の意味は大きく異なります。あなたは何をしようとしているのかもっと説明できますか? – Taylor

答えて

1

...など...

まあ、彼らは両方とも有効なJavaです。

両方のアプローチがありません私に

を同じ結果を与えるために、彼らは非常に異なるものを意味します。

はのは、二つのアプローチTest1Test2を実装するクラスを呼ぶことにしましょう:

class Test1<T extends Number> { ... } 
class Test2<T> extends Number { ... } 

Test1<Integer> a1 = new Test1<>(); // OK. 
Test2<Integer> a2 = new Test2<>(); // OK. 

Test1<Object> b1 = new Test1<>(); // Compiler error: Object not in bounds. 
Test2<Object> b2 = new Test2<>(); // OK - T isn't bounded. 

Number c1 = new Test1<Integer>(); // Compiler error: a Test1 isn't a Number. 
Number c2 = new Test2<Integer>(); // OK. 

ので、2つのクラスが等価ではありません。

あなたが選ぶべきものは、達成しようとしているものによって異なります。

関連する問題