在某個不知名的小屁專案中,使用了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了……
如果是這樣,那我還寫這個文幹啥?所以,注意:
String[] sarr = (String[])l.toArray();
for (String string : sarr) {
這段程式碼執行是不成功的!在我機器上執行結果(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);
以上
希望可以幫到您!
在某個不知名的小屁專案中,使用了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);
}
}
以上
希望可以幫到您!