1

次のスキームは、文字列/プリミティブをうまく処理します。ただし、リストを処理する場合、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>>();
    }
4

2 に答える 2

6

にをキャストしようとしてList<Object>List<String>ます。リストの内容がすべてである場合でも、はStringであるため、そのような直接キャストを行うことはできません。ListList<Object>

本当にそうしたい場合は、代わりにこれを使用できます。

List<Object> objList = { ... }; // all strings
List<String> strList = objList.Cast<String>().ToList();

List<Object>からへのキャストを実行できない理由List<String>は、すべての文字列がオブジェクトであるが、すべてのオブジェクトが文字列であるとは限らないためです。をキャストしてList<String>から(ではない)List<object>を追加しようとすると、動作は未定義になります。objectstring

于 2012-05-12T08:45:59.747 に答える
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();

ProductTypeJavaBeanです

于 2014-03-16T10:05:07.147 に答える