首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在Java中使用泛型类型调用.class吗?

在Java中,您可以使用泛型类型参数调用.class。但是,您需要使用反射API来实现这一点。以下是一个示例:

代码语言:java
复制
import java.lang.reflect.Method;

public class GenericClassTest {
    public static void main(String[] args) {
        Class<?> clazz = getClassFromGenericType(new MyClass<>());
        System.out.println("Class: " + clazz.getName());
    }

    public static <T> Class<?> getClassFromGenericType(MyClass<T> myClass) {
        try {
            Method method = myClass.getClass().getMethod("getType");
            return (Class<?>) method.invoke(myClass);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static class MyClass<T> {
        private final Class<T> type;

        public MyClass() {
            Type superclass = getClass().getGenericSuperclass();
            if (superclass instanceof ParameterizedType) {
                type = (Class<T>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
            } else {
                throw new IllegalArgumentException("MyClass must be parameterized");
            }
        }

        public Class<T> getType() {
            return type;
        }
    }
}

在这个示例中,我们创建了一个名为MyClass的泛型类,它具有一个getType方法,该方法返回泛型类型参数的Class对象。然后,我们使用反射API来获取MyClass的泛型类型参数,并将其存储在type字段中。最后,我们在main方法中调用getClassFromGenericType方法,该方法接受一个MyClass实例,并返回其泛型类型参数的Class对象。

请注意,这种方法可能会受到Java泛型擦除的影响,因此在某些情况下可能无法正常工作。在这种情况下,您可能需要使用其他方法来获取泛型类型信息,例如在运行时传递Class对象作为参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

57分38秒

1.尚硅谷全套JAVA教程--基础必备(67.32GB)/尚硅谷Java入门教程,java电子书+Java面试真题(2023新版)/08_授课视频/164-泛型-泛型的理解及其在集合、比较器中的使用.mp4

9分19秒

036.go的结构体定义

7分8秒

059.go数组的引入

13分17秒

002-JDK动态代理-代理的特点

15分4秒

004-JDK动态代理-静态代理接口和目标类创建

9分38秒

006-JDK动态代理-静态优缺点

10分50秒

008-JDK动态代理-复习动态代理

15分57秒

010-JDK动态代理-回顾Method

13分13秒

012-JDK动态代理-反射包Proxy类

17分3秒

014-JDK动态代理-jdk动态代理执行流程

6分26秒

016-JDK动态代理-增强功能例子

10分20秒

001-JDK动态代理-日常生活中代理例子

领券