我发现这种方法有效:
public class Test<T extends Number>{
以及
public class Test<T> extends Number{
是否缺少任何良好的做法,因为这两种方法都会给我相同的结果,只有第二种方法迫使我实施抽象方法。
public int intValue() {
throw new UnsupportedOperationException();
}
public long longValue() {
throw new UnsupportedOperationException();
}
public float floatValue() {
throw new UnsupportedOperationException();
}
public double doubleValue() {
throw new UnsupportedOperationException();
}
感谢
答案 0 :(得分:1)
我发现这种方法有效......以及......
嗯,它们都是有效的Java。
因为两种方法都会给我相同的结果
不,他们的意思非常不同。
让我们调用实现两种方法的类Test1
和Test2
:
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.
所以,这两个类不等同。
你应该选择的那个取决于你想要达到的目标。