Iterates over generic arrays of any type in Java

If there are Java collection instances that can carry primitive types, generic arrays, and / or iteratable collections, I want to treat generic arrays as iteratable collections, but how? For example, the following pseudo java code

List<?> list1; 
list1.add(new int[2]); 
list1.add(new String[3]); 
list1.add(new ArrayList());
for (Object e : list1){
    if (e instanceof Iterable){ 
        //The int[2] and String[3] will not fall in this case that I want it be
        //Iterate within e
    }
}

Please tell me how to make int [2] and string [3] fall in the case

Thank you & greetings, William

Solution

In the loop, you can use the appropriate array operands for instanceof

For int []:

if (e instanceof int[]) {
   // ...
}

For object arrays (including string []):

if (e instanceof Object[]){
    // ...
}

Alternatively, when you add arrays to the main list, you can wrap each array in arrays In aslist() In this case, you can use list < list > generic instead of wildcard generic list And avoid using instanceof to check data types Something like this:

List<List> list1; 
list1.add(Arrays.asList(new int[2])); 
list1.add(Arrays.asList(new String[3])); 
list1.add(new ArrayList());
for (List e : list1){
    // no need to check instanceof Iterable because we guarantee it's a List
    for (Object object : e) {
        // ...
    }
}

Any time you use instanceof and generics together, it's a smell. You may be doing something wrong with your generics

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>