繁体   English   中英

没有类型参数的泛型方法

[英]Generic method without type argument

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

这可能吗? 如果是这样,怎么做? 谢谢!

您想在运行时获取Class<T>传递给doSomethingElse()吗? 不,那是不可能的。

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

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

还要注意, (T)将被标记为未选中的向下转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM