假設我有類:的Java:如何以小博大的嵌套泛型類型
public interface ObjectWithId<T> {
T getId();
void setId(T id);
}
public class BaseDBObject<T> implements ObjectWithId<T> {
// Common fields:
private T id;
private String createdBy;
...
}
而且一個具體:
public class ConstituentEntity extends BaseDBObject<Integer> {
...
}
然後,我創建了一些服務,這不能不還採取? extends BaseDBObject
通用的參數之一,在某些方法中應該使用適當類型的id
。 現在,它採用雙泛型實現:
abstract public class BaseService<IdT,T extends BaseDBObject<IdT>> {
public T getById(IdT id){
return getDao().getById(id);
}
}
public class ConstituentEntityService extends BaseService<Integer, ConstituentEntity>{
...
}
但在最後一個定義再看看。我知道ConstituentEntity
已經有Integer
作爲他們的鑰匙持有人,所以我再次提供這種類型的服務似乎很難看。
我看一些可能性來寫未來建設:
abstract public class BaseService<T extends BaseDBObject> {
public T getById(??T.T?? id){
return getDao().getById(id);
}
}
在C++中,我們有typename
和typedef
對於這樣的情況有其複雜而強大的元編程的可能性。 Java中可能有類似的東西嗎?
也許不是最好的評論,但是:通常,Java泛型是不可避免的醜陋。你只需要吸他們。我已經完成了與「雙重泛型」完全相同的操作。 –