首页
学习
活动
专区
工具
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对象作为参数。

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

相关·内容

共17个视频
动力节点-JDK动态代理(AOP)使用及实现原理分析
动力节点Java培训
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。
领券