Re: Java type-casting -- Q3
grz01 wrote:
On 26 Sep, 18:29, Lew <no...@lewscanon.com> wrote:
You were given links to at least five strong articles on the topic.
Have you read the articles?
Greetings Lew! :)
Yes, thank you for the links!
Im still struggling with them, and the reason I decided to re-post
(including some more background for the actual problem I had)
was that I still didnt find (and still dont see)
the both elegant enough an practical enough solution I was hoping for.
Admittedly, my understanding of "generics",
is most likely a bit clouded by the fact that
I worked in the past for many years with
the pure polymorphic type-systems of functional languages,
which I always found totally sound, elegant,
and very easy and intuitive to work with.
First of all, maybe you should reconsider your choice of language. I
don't think there will ever be a programming language that is really
good for all styles of programming. It is much easier to write
functional language style code in a functional language than in Java.
Java makes defining new classes easy, and Java IDEs go along with the
game making it even easier, but Java does not have much in the way of
features for avoiding creating classes. If creating classes makes you
uncomfortable, you will probably not be a happy Java programmer.
Meanwhile, here is a solution to your problem using lists, with no
compiler warnings at all. It gives up some type safety, and so is
definitely not a solution I would choose or seriously recommend. I
don't know whether this approach has already been suggested. The
solution using a Pair class is far better, except I would name
the class for whatever is in common between the two lists.
import java.util.ArrayList;
import java.util.List;
public class GenericTest {
public static void main(String[] args) {
List<List<? extends Object>> myData = someMethod();
for(Object o : myData.get(0)){
String s = (String)o;
System.out.println(s);
}
for(Object o : myData.get(1)){
int i = (Integer)o;
System.out.println(i);
}
}
private static List<List<? extends Object>> someMethod(){
List<String> result1 = new ArrayList<String>();
List<Integer> result2 = new ArrayList<Integer>();
result1.add("aaa");
result1.add("bbb");
result2.add(1);
List<List<? extends Object>> result
= new ArrayList<List<? extends Object>>();
result.add(result1);
result.add(result2);
return result;
}
}