我想知道在Java中是否有办法在泛型方法中使用泛型类型而不需要指定类类型的参数。这是正常的做法:
public <T> T doSomethingGeneric(Class<T> type, int a) {
return (T) doSomethingElse(type, a);
}
我希望这是另一种选择:
public <T> T doSomethingGeneric(int a) {
return (T) doSomethingElse(/* some magic with T here */, a);
}
背景:我正在用Hibernate编写实用程序方法。这是我实际尝试做的一个例子,你可以推断它是如何应用于这个问题的。
public static <M extends Model> M get(Class<M> type, Serializable id) {
Session session = newSession();
Transaction t = session.beginTransaction();
Object model = null;
try {
model = session.get(type, id);
t.commit();
} catch (HibernateException ex) {
t.rollback();
throw ex;
}
return (M) model;
}
这可能吗?如果是这样,它是如何完成的?谢谢!
答案 0 :(得分:4)
您希望在运行时获得Class<T>
传递给doSomethingElse()
吗? No, that is not possible.
如果您描述doSomethingElse
需要Class<T>
的原因,或许我们可以建议一种解决方法。
答案 1 :(得分:2)
这是不可能的:doSomethingGeneric
的代码只编译一次,不像C ++中的模板实例化。在此过程中,T
类型已被删除至Object
。
另请注意,(T)
将被标记为未经检查的向下广播。