以下方案可以很好地处理字符串/基元。但是在处理列表时,它会在getObj()中给出类型转换错误。使用的类型是动态的,需要这种通用用法。 有没有更好的方法来实现它?
public static Object obj;
static public T getObj<T>()
{
return (T)obj;
}
private static string getStr()
{
return "some string";
}
private static List<Object> getList()
{
List<Object> res = new List<object>();
Object o = "str1";
res.Add(o);
o = "str2";
res.Add(o);
return res;
}
public static void Main()
{
obj = getStr();
string s = getObj<string>();
obj = getList();
List<string> slist = getObj<List<string>>();
}
答案 0 :(得分:6)
您正在尝试将List<Object>
投射到List<String>
。即使列表中的所有内容都是String
,List
仍然是List<Object>
,因此您无法像这样直接投射。
如果你真的想这样做,你可以改用它:
List<Object> objList = { ... }; // all strings
List<String> strList = objList.Cast<String>().ToList();
您无法从List<Object>
转换为List<String>
的原因是因为所有字符串都是对象,但并非所有对象都是字符串;如果您将List<String>
投放到List<object>
,然后尝试向其中添加object
(不是string
),则行为将是未定义的。
答案 1 :(得分:1)
希望这对你有所帮助!!!
public List<Object> lisObject() {
List<Object> listProduct = new ArrayList<Object>();
try {
con.setAutoCommit(false);
callableStatement = con.prepareCall("call listType()");
rs = callableStatement.executeQuery();
while(rs.next()){
pType = new ProductType();
pType.setPtypeId(rs.getInt(1));
pType.setPName(rs.getString(2));
pType.setDesc(rs.getString(3));
pType.setCatMaster(new CatMaster(rs.getInt(4), rs.getString(5)));
listProduct.add(pType);
}
con.commit();
} catch (Exception e) {
System.out.println("Failed to Fetching List of Type Object:"+e);
}finally{
}
return listProduct;
}
%%%%%%%%%%%%%%%%%
Fetching Data
%%%%%%%%%%%%%%%%
List<Object> listpro =(List<Object>)dao.lisObject();
int i=0;enter code here
for(Iterator<Object> itr = listpro.iterator();itr.hasNext();){
ProductType p = (ProductType)itr.next();
ProductType
是java bean