2013-08-20 102 views
0

鑑於這樣Java泛型 - 命名實際的各種實際類型的

public interface MyInterface1<T extends MyAbstractClass> { 
    ... 
} 

我不想再拍接口MyInterface2採取MyInterface1作爲通用型和MyInterface2我要引用的實際類型的接口實際MyInterface1

public interface MyInterface2<INTERFACE extends MyInterface1<MYCLASS>> { 
    MYCLASS returnInstanceOfMyClass(); 
} 

所以我想說的是,法「returnInstanceOfMyClass」返回給MyInterface2實際MyInterface1的實際噸。

的事情是,我不允許寫以下

public interface MyInterface2<INTERFACE extends MyInterface1<MYCLASS>> { 

允許我寫

public interface MyInterface2<INTERFACE extends MyInterface1<?>> { 

但當時我不能夠引用的實際類型T的MyInterface1在MyInterface2中的方法簽名中 - 因爲在引用時我沒有給它使用名字。

我希望能夠做一個類型安全的方式

class MyClass extends MyAbstractClass { 
    ... 
} 

MyClass c = new MyInterface2<MyInterface1<MyClass>>.returnInstanceOfMyClass(); 

沒有鑄造MyClass的應該是必要的下面,因爲它可以看到,給MyInterface2實際類MyInterface1的是MyClass的,這就是從returnInstanceOfMyClass返回的內容。

如何做到這一點?

+0

無法實例接口。 – Antimony

回答

3

你需要第二個泛型參數:

public interface MyInterface2<U estends MyAbstractClass, T extends MyInterface1<U>> { 
    U returnInstanceOfMyClass(); 
} 
+2

'U擴展MyAbstractClass'。 –

相關問題