Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:从通用列表/集合派生_Java_List_Generic List - Fatal编程技术网

Java:从通用列表/集合派生

Java:从通用列表/集合派生,java,list,generic-list,Java,List,Generic List,我在理解Java语言方面有点问题 public class PhonebookEntryList extends List<PhonebookEntry> { public PhonebookEntryList(String filename) throws IOException { //loadListFromFilename(filename); } public void saveListToFilename(String f

我在理解Java语言方面有点问题

public class PhonebookEntryList extends List<PhonebookEntry>
{
    public PhonebookEntryList(String filename) throws IOException
    {
        //loadListFromFilename(filename);
    }

    public void saveListToFilename(String filename) throws IOException
    {
        //Do something to save it to a file
    }
}
公共类PhonebookEntryList扩展列表
{
public PhonebookEntryList(字符串文件名)引发IOException
{
//loadListFromFilename(文件名);
}
public void saveListToFilename(字符串文件名)引发IOException
{
//做点什么把它保存到一个文件中
}
}
我不能这样做,因为List是一种泛型类型(当然)。我知道这意味着什么,但目前我想不出解决这个问题的办法


你能帮我解决吗?塔克斯

不,您唯一的问题是
扩展了
接口
;您必须执行它

public class PhonebookEntryList implements List<PhonebookEntry>
公共类PhonebookEntryList实现列表
应该工作;或者您可能更喜欢扩展一个具体的类:

public class PhonebookEntryList extends ArrayList<PhonebookEntry>
公共类PhonebookEntryList扩展了ArrayList

公共类PhonebookEntryList扩展了LinkedList

不,您唯一的问题是
扩展了
接口
;您必须执行它

public class PhonebookEntryList implements List<PhonebookEntry>
公共类PhonebookEntryList实现列表
应该工作;或者您可能更喜欢扩展一个具体的类:

public class PhonebookEntryList extends ArrayList<PhonebookEntry>
公共类PhonebookEntryList扩展了ArrayList

公共类PhonebookEntryList扩展了LinkedList

列表
是一个接口,而不是一个类,因此不能从中继承。但是,如果您希望创建特定类型的集合,例如,具有特定于该类型的某些行为的集合,则可以从泛型类型继承,并提供类型参数。

List
是一个接口,而不是类,因此您不能从它继承。但是,如果您希望创建特定类型的集合,例如,具有特定于该类型的某些行为的集合,则可以从泛型类型继承,并提供类型参数。

您不能这样做,因为列表是一个接口。但是 您不应该扩展或实现List类来生成PhonebookEntryList,这是一个设计错误

你应该做:

public class PhonebookEntryList
{
    private List<PhonebookEntry> entries;

    public PhonebookEntryList(String filename) throws IOException
    {
        //loadListFromFilename(filename);
    }

    public void saveListToFilename(String filename) throws IOException
    {
        //Do something to save it to a file
    }
}
公共类PhonebookEntryList
{
私人名单条目;
public PhonebookEntryList(字符串文件名)引发IOException
{
//loadListFromFilename(文件名);
}
public void saveListToFilename(字符串文件名)引发IOException
{
//做点什么把它保存到一个文件中
}
}

例如,您的PhonebookEntryList应该包含一个列表,而不是继承它。

您不能这样做,因为列表是一个接口。但是 您不应该扩展或实现List类来生成PhonebookEntryList,这是一个设计错误

你应该做:

public class PhonebookEntryList
{
    private List<PhonebookEntry> entries;

    public PhonebookEntryList(String filename) throws IOException
    {
        //loadListFromFilename(filename);
    }

    public void saveListToFilename(String filename) throws IOException
    {
        //Do something to save it to a file
    }
}
公共类PhonebookEntryList
{
私人名单条目;
public PhonebookEntryList(字符串文件名)引发IOException
{
//loadListFromFilename(文件名);
}
public void saveListToFilename(字符串文件名)引发IOException
{
//做点什么把它保存到一个文件中
}
}
也就是说,您的PhonebookEntryList应该包含一个列表,而不是继承它。

如果您查看,您将看到(正如其他人提到的)它是一个接口,而不是一个类。您最想做的是在同一个JavaDoc页面上查看“所有已知的实现类”,您将看到
AbstractList
。扩展这个。或者,扩展一个非抽象的
列表
实现

注意:大多数情况下,当有人开始扩展某个Java集合类时,您走错了路。通常,最好使用类中的一个现有集合并代理所需的任何集合样式请求。或返回集合的不可修改代理:

public class MyClass {
  private final List<PhonebookEntry> myList = new LinkedList<PhonebookEntry>();

  public List<PhonebookEntry> getList() {
    return Collections.unmodifiableList(myList);
  }
}
公共类MyClass{
私有最终列表myList=新建LinkedList();
公共列表getList(){
返回集合。不可修改列表(myList);
}
}
通常,只有当您想要拥有与您正在扩展的类不同的行为时,才最好扩展一个类。继承比组合更脆弱。

如果你看一下,你会发现(正如其他人提到的)它是一个接口,而不是一个类。您最想做的是在同一个JavaDoc页面上查看“所有已知的实现类”,您将看到
AbstractList
。扩展这个。或者,扩展一个非抽象的
列表
实现

注意:大多数情况下,当有人开始扩展某个Java集合类时,您走错了路。通常,最好使用类中的一个现有集合并代理所需的任何集合样式请求。或返回集合的不可修改代理:

public class MyClass {
  private final List<PhonebookEntry> myList = new LinkedList<PhonebookEntry>();

  public List<PhonebookEntry> getList() {
    return Collections.unmodifiableList(myList);
  }
}
公共类MyClass{
私有最终列表myList=新建LinkedList();
公共列表getList(){
返回集合。不可修改列表(myList);
}
}
通常,只有当您想要拥有与您正在扩展的类不同的行为时,才最好扩展一个类。继承比组合更脆弱。

是一个接口

如果您想
扩展
一个类,您必须选择一个实现(可能):
扩展ArrayList

如果要实现
列表
请将代码更改为:
实现列表

是一个接口

如果您想
扩展
一个类,您必须选择一个实现(可能):
扩展ArrayList


如果要实现
列表
请将代码更改为:
实现列表

,问题在于您试图扩展接口,而不是实现它

作文是你想要的。创建一个封装列表的类(或包含该接口元素的类)


和添加功能。

您的问题是您试图扩展接口,而不是实现它

作文是你想要的。创造