Java 为什么我能';是否将CustomType ArrayList添加到对象ArrayList的ArrayList?

Java 为什么我能';是否将CustomType ArrayList添加到对象ArrayList的ArrayList?,java,generics,arraylist,Java,Generics,Arraylist,我有这样的单人课: public class Singleton private static Singleton instance; private ArrayList<Release> releases; private ArrayList<Place> places; ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object

我有这样的单人课:

public class Singleton
    private static Singleton instance;
    private ArrayList<Release> releases;
    private ArrayList<Place> places;
    ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>(2);

   private Singleton() {
       releases = new ArrayList<Release>();
       places = new ArrayList<Place>();
       list.add(release); //error, required AL<Object>, provided AL<Release> 
       list.add(places); //same
   }

   public static Singleton getInstance(){
    /* Singleton code */
   }
公共类单例
私有静态单例实例;
私有ArrayList发布;
私人ArrayList场所;
ArrayList=新的ArrayList(2);
私人单身人士(){
releases=新的ArrayList();
places=newarraylist();
list.add(release);//错误,必需AL,提供AL
list.add(places);//相同
}
公共静态单例getInstance(){
/*单例码*/
}
我认为这是可能的,因为每个类都扩展了对象类。我的目的是从文件中读取ALs保存为对象a,然后这些ALs在一个AL的集合中,其中AL.get(PLACES\u INDEX)将返回位置,等等。这是一个很好的方法,还是我遗漏了什么

稍后,我想有一些统一的方法,比如:

public ArrayList<T> getArrayList() {
   /*return places or releases based on <T>*/
}
public ArrayList getArrayList(){
/*返回基于*/
}

我不知道这是否可能,因为这个类是单例的。

我将解释为什么会出现错误,但从您描述的情况来看,这对于您的类来说似乎是一个糟糕的设计:不要在列表中存储“通用”列表,而是基于某个索引访问它们。并且不要创建一个类似于
public ArrayList getArrayList(){
的方法,该方法根据类型
t
返回一个列表。这太过工程化,使代码更难维护,也更容易中断

只需分别保存不同的列表,并为每个列表提供getter。如果您正在从文件中读取内容,并希望将内容反序列化为数据结构,只需创建一个类结构对内容进行建模。您的代码将更简单、更易于阅读

即使
Release
Object
的子类,
ArrayList
也不是
ArrayList
的子类,因此您不能将
ArrayList
添加到
ArrayList中。如果Java允许您这样做,那么您最终可能会遇到一个中断代码一般用法的场景:

ArrayList<ArrayList<Object>> list = new ArrayList<>();
ArrayList<Release> releases = new ArrayList<>();
list.add(releases);   // imagine this is allowed
ArrayList<Object> releasesFromList = list.get(0);
releasesFromList.add(place); // oops, added a place to list of release
ArrayList list=new ArrayList();
ArrayList releases=新的ArrayList();
list.add(releases);//假设这是允许的
ArrayList releasesFromList=list.get(0);
releasesFromList.add(place);//哦,在发布列表中添加了一个位置

哦,我明白了。我还有方法:
readPlaces()
readReleases()
(至少有五种)它读取这些对象的列表并将它们分配给
ArrayList
ArrayList
列表。这些方法只有两行不同,即文件名和我分配刚读过的ArrayList时。另一方面,它不是在重复我自己吗?@Flauslord如果唯一的区别是文件名和要分配的列表fill,那么我想你可以创建一个方法(或者一个helper类,取决于你的复杂程度),将文件名和要填充的列表作为参数。这里它与泛型无关,但是它可以避免重复。