Suppose I have class:
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 中是否有类似的功能?