Java:从通用列表/集合派生
我在理解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
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
如果要实现列表
请将代码更改为:实现列表
,问题在于您试图扩展接口,而不是实现它
作文是你想要的。创建一个封装列表的类(或包含该接口元素的类)
和添加功能。您的问题是您试图扩展接口,而不是实现它
作文是你想要的。创造