以编程方式设置列表标识符

Programmatically setting a list identifier

A java class 包含一个 List 实例变量。 我需要设置此 ListString 变量中保存的对象类型。

private List<VARIABLE> myList; String VARIABLE = "BasicDegreeClass";

在 JAVA 中是否允许这样做,如果可以,如何实现?

提前致谢

您只能使用 class 而不是 primitive types 或其值来创建 List

示例:-

List<Integer> a =  new ArrayList<>();
List<YourObject> obj = new ArrayList<>();

但是如果你愿意尝试 primitive types 那么你会得到。

像这样使用泛型会更好

private List<T> myList;

documentation here

但可以使用字符串来表示 class 名称或充当唯一标识符,前提是您自己支持

首先,您必须创建一个列表,其中 T 是列表中包含的对象的类型。

因此,您的代码应读作

private List<T> myList;

来自 javadoc,

<T> the type of elements in this list.

在您的情况下,编译器不知道要添加到列表中的元素类型,因此它不会工作。

但是您可以使用 List<Object> 作为替代方法,但这通常是长 运行 中的代码味道并且很难维护

  • 它扼杀了泛型的想法。
  • 使您的代码容易出现 ClassCastException。
  • 在一个完美的世界里,即使你在添加元素时是安全的, 您将需要在所有地方禁止警告并需要返回 类型。

正确的解决方案:您可以编写一个接口,ArrayList 的所有对象都将遵守该接口。继续

List<'YOUR INTERFACE TYPE HERE'> myList = new ArrayList<>();

你不需要担心列表中的对象类型吗?希望这对您有所帮助!

如果您过于具体而无法保存在字符串中,这里有一个解决方法。

public static <T> List<T> getCastedList(List<Object> objList, Class<T> clazz) {
        List<T> newList = new ArrayList<T>();
        if (objList != null) {
            for (Object object : objList) {
                if (object != null && clazz.isAssignableFrom(object.getClass())) {
                    newList.add((T) object);
                }
            }
        }
        return newList;
    }

并将其命名为

getCastedList(myList, Class.forName(VARIABLE));