Re: ArrayList of ArrayList and unchecked conversions
mrericscott@gmail.com wrote:
I seem to be having some trouble with a list of lists. Here's the
code:
When you post code, would you please post an SSCCE instead of fragments?
It's much easier to experiment and reason about the situation that way.
<http://www.physci.org/codes/sscce.html>
//build a list of lists
ArrayList<ArrayList> listOfLists = new ArrayList<ArrayList>();
//build a list of DataPoints
ArrayList<DataPoint> listOfPoints = new ArrayList<DataPoint>();
//put a few DataPoints in the listOfPoints
DataPoint point = new DataPoint("Howdy", 1);
listOfPoints.add(point);
point = new DataPoint("Dude", 2);
listOfPoints.add(point);
//put the listOfPoints in the listOfLists
listOfLists.add(listOfPoints);
//build a second list of DataPoinsts and put that in the listOfLIsts
listOfPoints = new ArrayList<DataPoint>();
point = new DataPoint("How are you", 20);
listOfPoints.add(point);
listOfLists.add(listOfPoints);
//get the first element from each listOfPoints stored in the
listOfLists
System.out.println(listOfLists.get(0).get(0)); // both work fine
System.out.println(listOfLists.get(1).get(0));
//try to retrieve the first list of data from the listOfLists
listOfPoints = listOfLists.get(0); // ??? causes an unchecked
conversion
System.out.println(listOfPoints.get(0)); //works fine
//try to get the DataPoint directly from the listOfLists
DataPoint retrievedPoint =
listOfLists.get(0).get(0); // ??? causes "incompatible
type"
//----DataPoint Class Definition in seperate file
public class DataPoint
{
public Object data;
public int time;
public DataPoint ()
{
data = null;
time = 0;
}
public DataPoint(Object data, int ticks)
{
this.data = data;
this.time = ticks;
}
public String toString()
{
String s = new String(data.toString() + " " + time);
return s;
}
}
The questions are these:
1) Why does the first ??? line cause the unchecked conversion?
Because the generic type <ArrayList> is itself a raw type.
1a) If that code isn't the right way to retrieve one of the lists
stored in the listOfLists, what is?
List< List <DataPoint> >
2) Why do both System.out.println statements work fine but the
second ??? causes an "incompatible type"
The first one retrieves via a raw type; the first get(0) retrieves a raw
ArrayList, the second get(0) in the expression retrieves an Object (not a
DataPoint).
The second one tries to retrieve a List<DataPoint> with the get(0) call, but
instead it retrieves a raw List which you then attempt to assign to the
List<DataPoint>. That generated the error.
2a) How do I go about retrieving data items from one of the sublists
properly?
Genericize all the Lists.
--
Lew