0

我想知道是否可以从 Java 类型创建实例并填充参数化列表?

我有一个UserDefinedType带有成员变量的类型List<AnotherUserDefinedType> list的类型(以及一些原始类型)

使用反射(处理自定义注释)UserDefinedType我只处理具有特定注释的成员变量。如果在注解上设置了特定属性,则意味着它AnotherUserDefinedType与原始类型相反,因此处理方式不同。在这种情况下,我将完全按照我所做的UserDefinedType.

需要注意的是,我必须创建AnotherUserDefinedTypefrom的一个实例Field.getGenericType(),并以某种方式将它们添加到参数化类型List<AnotherUserDefinedType>和 callUserDefinedType.setAnotherUserDefinedType(List<AnotherUserDefinedType> list)中。

我试图找到一些关于它的信息,但现在不知所措。任何援助将不胜感激。

4

1 回答 1

0

如果参数类型本身不是类型参数,并且是具有默认无参数构造函数的类,则可以执行以下操作:

public class UserDefinedType {
    private List<AnotherUserDefinedType> data;

    public static void main(String[] args) throws Exception {
        UserDefinedType inst = new UserDefinedType();
        ParameterizedType type = (ParameterizedType) UserDefinedType.class.getDeclaredField("data").getGenericType();
        Class<?> clazz = (Class<?>) type.getActualTypeArguments()[0];
        Object obj = clazz.newInstance();  //this is of type "AnotherUserDefinedType"
    }
}

虽然这很糟糕,在这种情况下,如果没有反射(通过直接实例化),它不会完成任何你无法做到的事情AnotherUserDefinedType。也许您可以通过所有这些扩展您的核心目标是什么?也许我们可以建议一种更清洁的方法。

如果列表本身是使用类类型参数参数化的:

 public class UserDefinedType<T> {
     private List<T> data;
     //...
 }

那么这是不可能的。由于类型擦除,该类型在运行时将不可用。

所以基本上只有在类型是静态已知的情况下才有可能,如果类型是静态已知的,你可能不需要反射。

于 2010-11-29T19:44:23.540 回答