如何在静态方法中返回泛型类型对象

时间:2012-07-04 08:39:24

标签: java

我有2个班级:

public class Super {

    public static <T> T bar(Class<T> clazz){

        try {
            return (T)(clazz.newInstance());
        } catch (IllegalAccessException e) {           
            e.printStackTrace();
        } catch (InstantiationException e) {           
            e.printStackTrace();
        }
        return null;
    }
}

public class Sub extends Super{

    public static void main(String[] args){
        Sub s = Sub.bar(Sub.class);

    }
}

现在我不想将Class<T> clazz用作bar的参数,所以如何返回通用类型T,谢谢。

2 个答案:

答案 0 :(得分:2)

你做不到。泛型只是编译时间,并且不可用于运行时。因此,您将 提供Class clazz以便在运行时了解T。

答案 1 :(得分:1)

提供Class实例来创建新对象没有错。

如果您的代码需要创建对象或通常在某些类上运行,则应传递实例。此操作与其他对象使用没有区别。仿制药应该使事情变得更容易,并确保类型安全。所以在这种情况下,只能通过对通用参数设置一些限制,通过条形静态方法创建女巫类的限制。

顺便说一句。

您应该从实现该类的类中调用静态方法,而不是Sub.bar(Sub.class),而应该Super.bar(Sub.class)