我需要将Object
投射到List<SomeClassName>
。
我从请求参数中获取对象值List<SomeClass>
。
我需要将此Object
投射到List<SomeClass>
。我在编译时不知道SomeClass
。
我可以在运行时将类类型设为String
。
样品:
private static Object createList(Object object){
List dd = (List)object;
//the List contains the objects of this class
Class cls = Class.forName(dd.get(0).getClass().getName());
//I would like to cast this Object to List<thisClass>
}
例如,类是jp.Dto.UserDto
,然后转换应该像List<jp.dto.UserDto> list = (List<jp.dto.UserDto>)Object;
,但这里的问题是我在编译时不知道jp.dto.UserDto
类。我只能在运行时才能得到它。
如何实现这一目标?
答案 0 :(得分:9)
基本上,我不是真的推荐,你可以做这样的事情,甚至不需要类型限制:
public static void main(String[] args) {
Object list = new ArrayList<String>();
List<Integer> integers = cast(list);
}
@SuppressWarnings("unchecked")
public static <T extends List<?>> T cast(Object obj) {
return (T) obj;
}
它还显示了它引入的问题
答案 1 :(得分:2)
你应该理解Java中的泛型,即&lt;&gt;之间的东西。在运行时被删除,因此声明如下列表是完全合法的。
List list = (List)someObject;
此外,还允许将对象添加到此列表中,如下所示
list.add(someObjectOfACertainClass);
根据我的理解,您正在传递一个对象,该对象是某个类的对象列表,并且您希望以编译时类型安全的方式遍历该列表。您可以执行以下操作:
private static <T> Object createList(List<T> argumentList) {
List<T> otherList = new ArrayList<T>();
//do something here
return otherList;
}
答案 2 :(得分:0)
将对象添加到您的列表中:
List<FuelLoading> objList=new ArrayList<>();
objList.add(new FuelLoading(String.valueOf(vehicleId), String.valueOf(driverId), String.valueOf(fuelN), fillingDate, fillingTk, fillingM, userId));