繁体   English   中英

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

[英]How to return a generic type object in a static method

我有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 ,谢谢。

你不能 泛型仅在编译时提供,在运行时不可用。 因此,你必须提供Class clazz ,以了解在运行时的吨。

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

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

顺便说一句。

你应该叫从那里来实现的,而不是如此类的静态方法Sub.bar(Sub.class)你应该有Super.bar(Sub.class)

暂无
暂无

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

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