1

我想知道在 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;
}

这可能吗?如果是这样,它是如何完成的?谢谢!

4

2 回答 2

4

你想Class<T>在运行时得到一个传递给doSomethingElse()? 不,那是不可能的。

如果您描述了为什么doSomethingElse需要 a Class<T>,也许我们可以建议一种解决方法。

于 2013-02-28T20:39:08.373 回答
2

这是不可能的: 的代码doSomethingGeneric只编译一次,这与 C++ 中模板的实例化不同。该类型在此过程中T擦除Object

另请注意,这(T)将被标记为未经检查的向下转换。

于 2013-02-28T20:39:00.503 回答