对不起该瓷砖......我不知道如何恢复我的问题。
让我来介绍一下我的问题:
我想获得通用类型的类型。
一些代码:
public class AbstractDao<T, PK extends Serializable> {
public T getByPrimaryKey(PK primariKey) {
return null;
}
}
public class AbstractEntity<PK extends Serializable> {
PK id;
//Getter Setter
}
public class Entity extends AbstractEntity<Long> {
}
我想改变的代码:
public class AbstractService<T, PK extends Serializable> {
AbstractDao<T, PK> dao;
public T getByPrimaryKey(final PK primaryKey) {
return dao.getByPrimaryKey(primaryKey);
}
}
public class EntityService extends AbstractService<Entity, Long> {}
我们的想法是从AbstractService中删除“PK extends Serializable” 并动态地得到它。
知道怎么做吗? - &GT; PK应该保留...我不想在方法中使用“对象”而不是“PK”:
public T getByPrimaryKey(final PK primaryKey)
感谢您的帮助。
亲切的问候
答案 0 :(得分:0)
如果您不想要通用PK
类型,那么您可以创建一个PrimaryKey
接口作为实际主键的包装器,具有各种实现,例如LongPrimaryKey
等。这样你可以避免泛型类型。
但是,如果你想能够传递实际类型本身(例如Long),那么我看不到泛型类型的方法,在我看来,它在适当的位置。
答案 1 :(得分:0)
如果您创建AbstractDao的具体实例,java可以确定其泛型类型。
(Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
将为您提供第一个Generic Paramter的运行时类型。这并不总是可用,因此请查看文档和。