以编程方式设置列表标识符
Programmatically setting a list identifier
A java class 包含一个 List
实例变量。
我需要设置此 List
在 String
变量中保存的对象类型。
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;
但可以使用字符串来表示 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));
A java class 包含一个 List
实例变量。
我需要设置此 List
在 String
变量中保存的对象类型。
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;
但可以使用字符串来表示 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));