在面向对象编程中,确定泛型类型的类通常是必要的。但是,当使用泛型类时,由于运行时的类型擦除,此任务变得具有挑战性。
考虑以下示例,其中 MyGenericClass 尝试使用第三方库创建类型 T 的实例:
public class MyGenericClass<T> { public void doSomething() { // Create an instance of class T T bean = (T)someObject.create(T.class); } }
此方法失败,并出现“类型参数 T 的类文字非法”错误。为了解决这个问题,一个常见的解决方法是将类型 T 作为参数传递给静态方法:
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<U>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { // Create an instance of class T T instance = clazz.newInstance(); } }
通过显式传递类 T,代码可以成功创建所需类型的实例。虽然这种方法不如直接方法调用那么优雅,但它为确定泛型类型的类提供了可靠的解决方案。
以上是如何确定泛型类中泛型类型的类?的详细内容。更多信息请关注PHP中文网其他相关文章!