當涉及到有界類型時,我有一個理解Java類型擦除的問題。考慮這個:什麼是運行時簽名?
class Event {} // From the API
class FooEvent extends Event {}
abstract class Foo<EventType extends Event> {
public abstract <E extends EventType> void onEventCaught(E event);
}
class Bar extends Foo<FooEvent> {
@Override
public void onEventCaught(FooEvent event) {
}
}
顯然這個編譯沒有問題。我問自己的問題是,這裏的參數類型是Bar#onEventCaught()
,這裏(如反思所說的)?
難道是onEventCaught(FooEvent event)
或者onEventCaught(Event event)
?
不要對你的泛型類型就像你已經有了類。例如,你可以創建類如'class Foo',但對於這個類,String將表示泛型類型而不是java.lang.String類型,所以你將不能使用String s =「hello world」 '裏面呢。命名泛型類型比較簡單,比如'class Foo '。 –
Pshemo
2015-02-07 22:25:31
@Pshemo注意到,我想這樣可以避免將來在我身邊出現一些混淆...... – WorldSEnder 2015-02-07 22:27:28