回覆列表
  • 1 # 深夜最科技

    在某個不知名的小屁專案中,使用了Hibernate,在查詢的時候,使用hql查詢,設定查詢條件的時候使用 in 方式 ,比如:

    select username from user where id in (:id)

    然後設定引數的時候,hibernate要求這個引數為Array(Object[])或者List(Collection)

    然後,因為我這個方法是通用的,所以這裡的引數是用一個 Map<String,Object> 傳入的,這就導致我在解析的時候必須將這個Object轉換成Object[]

    當然經過我的實踐,這裡的解決方式其實很簡單

    List<String> l = new ArrayList<String>();

    l.add("ss1");

    l.add("ss2");

    l.add("ss3");

    l.add("ss4");

    l.add("ss5");

    String[] sarr = new String[l.size()];

    l.toArray(sarr);

    for (Object string : (Object[])sarr) {

    System.out.println(string);

    }

    這個程式碼是能透過編譯並且執行成功的也就是說,我還轉個皮啊。。。直接寫就ok了……

    如果是這樣,那我還寫這個文幹啥?所以,注意:

    List<String> l = new ArrayList<String>();

    l.add("ss1");

    l.add("ss2");

    l.add("ss3");

    l.add("ss4");

    l.add("ss5");

    String[] sarr = (String[])l.toArray();

    for (String string : sarr) {

    System.out.println(string);

    }

    這段程式碼執行是不成功的!在我機器上執行結果(jdk7):

    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

    List中不帶參的toArray方法返回的是Object[],並且不能直接轉成String[]綜上,String[]可以轉成Object[],但是反過來就不行

    現在回到我題目中的問題,上程式碼第一步,確定傳入的這個Object是一個Array第二步,獲取這個Array的長度第三步,建立一個相同長度的陣列(什麼型別根據你的需求自定義,前提是能相容,比如我的程式碼是寫Object,不管是啥都能進去了)第四步,挨個取出原來陣列中的元素放到新的陣列中

    import java.lang.reflect.Array

    ..............

    if (obj.getClass().isArray()) {

    int length = Array.getLength(obj);

    Object[] os = new Object[length];

    for (int i = 0; i < os.length; i++) {

    os[i] = Array.get(obj, i);

    }

    }

    以上

    希望可以幫到您!

  • 中秋節和大豐收的關聯?
  • 鬼王與週一仙的關係?