Java 以编程方式设置列表标识符
java类包含一个实例变量,它是一个Java 以编程方式设置列表标识符,java,android,list,identifier,Java,Android,List,Identifier,java类包含一个实例变量,它是一个列表。 我需要设置此列表在字符串变量中保存的对象类型 私有列表myList; 字符串变量=“BasicDegreeClass” JAVA是否允许这样做?如果允许,如何实现 提前感谢您只能使用类而不是基本类型或其值创建列表 例如:- List<Integer> a = new ArrayList<>(); List<YourObject> obj = new ArrayList<>(); List a=new
列表
。
我需要设置此列表
在字符串
变量中保存的对象类型
私有列表myList;
字符串变量=“BasicDegreeClass”代码>
JAVA是否允许这样做?如果允许,如何实现
提前感谢您只能使用类
而不是基本类型
或其值创建列表
例如:-
List<Integer> a = new ArrayList<>();
List<YourObject> obj = new ArrayList<>();
List a=new ArrayList();
List obj=new ArrayList();
但是如果您尝试使用基元类型
,那么您将得到
最好使用这样的泛型
私有列表myList代码>
但是,可以使用字符串来表示类名或充当唯一标识符,如果您自己也支持这一点,则首先必须创建一个列表,其中T是列表中包含的对象类型
因此,您的代码应该读为
私有列表myList代码>
从javadoc
此列表中元素的类型。
在您的情况下,编译器将不知道要添加到列表中的元素的类型,因此它将无法工作
不过,您可以使用List
作为替代,但从长远来看,这通常是一种代码味道,很难维护
- 它扼杀了泛型的概念李>
- 使您的代码容易发生ClassCastException李>
- 在一个完美的世界里,即使你在添加元素时很安全,
您将需要在任何地方抑制警告,并需要回退到
类型
正确的解决方案:您可以编写一个接口,ArrayList的所有对象都将遵循该接口。继续做类似的事情
List<'YOUR INTERFACE TYPE HERE'> myList = new ArrayList<>();
不确定你的情况到底是什么。这样行吗<代码>类测试{List List;}
代码>是的,这就是我在上面所做的。使用泛型类型。不确定你的要求是什么,但你最好使用。或者您可以使用类似于String variableType=myList.get(index.class.getName()
的内容。但请确保列表已初始化(非null)且不为空,并且请注意,永远不要使用大写标识符名称声明包私有变量。很高兴听到@NiazAhsan:)
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));