我想知道以下两种方法是否基本相同?
public static Parent withParent(Parent p) {
p.doSomething();
return p;
}
public static <E entends Parent> E withGenericType(E e) {
e.doSomething();
return E;
}
public class Child extends Parent {
@Override
public void doSomething() {
System.out.println("override");
}
}
public static void main(String [] args) {
// are they the same ?
withParent(new Child());
withGenericType(new Child());
}
以及在什么情况下你会使用其中一个?
答案 0 :(得分:0)
他们不是一回事。
想象一下,你有一个班级Child extends Parent
:
Child c = new Child();
c = with(c);
这将使用通用版本编译,但不使用非通用版本(因为它返回Parent
,而不是Child
)。
使用非泛型版本时,您必须将引用转发回Child
,依赖于方法的行为以确保这样做:
Child c = new Child();
c = (Child) with(c);
泛型基本上为你添加了这个演员。
你为什么要这样?考虑一下上面的内容:
Child c = with(new Child());