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

时间:2019-01-07 07:02:54

标签: java android list identifier

一个Java类包含一个实例变量,该变量是List。 我需要将此List容纳在String变量中的对象类型设置。

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

在JAVA中是否允许这样做?如何实现?

预先感谢

3 个答案:

答案 0 :(得分:3)

首先,您必须创建一个列表,其中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<>();

您不必担心列表内的对象类型。希望这会有所帮助!

如果您太过具体而无法保存在String中,这是一种解决方法。

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));

答案 1 :(得分:1)

最好使用这样的泛型

private List<T> myList;

documentation here

但是,只要您自己支持,就可以使用字符串来表示类名或充当唯一标识符。

答案 2 :(得分:0)

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

示例:-

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

但是,如果您尝试使用primitive types,那么您会得到。

enter image description here