【发布时间】:2011-02-22 07:49:56
【问题描述】:
我上次用 Java 编写代码已经两年了,所以我的编码技能有点生疏了。
我需要将数据(用户配置文件)保存在不同的数据结构中,ArrayList 和LinkedList,它们都来自List。我想尽可能避免代码重复,并且我还想遵循良好的 Java 实践。
为此,我正在尝试创建一个抽象类,其中私有变量的类型为 List<E>,然后根据变量的类型创建 2 个子类。
问题是,我不知道我这样做是否正确,你可以看看我的代码:
类:DBList
import java.util.List;
public abstract class DBList {
private List<UserProfile> listName;
private List<UserProfile> listSSN;
public List<UserProfile> getListName() {
return this.listName;
}
public List<UserProfile> getListSSN() {
return this.listSSN;
}
public void setListName(List<UserProfile> listName) {
this.listName = listName;
}
public void setListSSN(List<UserProfile> listSSN) {
this.listSSN = listSSN;
}
}
类:DBListArray
import java.util.ArrayList;
public class DBListArray extends DBList {
public DBListArray() {
super.setListName(new ArrayList<UserProfile>());
super.setListSSN(new ArrayList<UserProfile>());
}
public DBListArray(ArrayList<UserProfile> listName, ArrayList<UserProfile> listSSN) {
super.setListName(listName);
super.setListSSN(listSSN);
}
public DBListArray(DBListArray dbListArray) {
super.setListName(dbListArray.getListName());
super.setListSSN(dbListArray.getListSSN());
}
}
类:DBListLinked
import java.util.LinkedList;
public class DBListLinked extends DBList {
public DBListLinked() {
super.setListName(new LinkedList<UserProfile>());
super.setListSSN(new LinkedList<UserProfile>());
}
public DBListLinked(LinkedList<UserProfile> listName, LinkedList<UserProfile> listSSN) {
super.setListName(listName);
super.setListSSN(listSSN);
}
public DBListLinked(DBListLinked dbListLinked) {
super.setListName(dbListLinked.getListName());
super.setListSSN(dbListLinked.getListSSN());
}
}
1) 这有什么意义吗?我究竟做错了什么?你有什么建议吗?
2) 在DBList 中有构造函数并在子类中调用它们(使用super())对我来说更有意义,但我不能这样做,因为我不能t 用new List<E>() 初始化一个变量。
3) 我被认为尽可能做深拷贝,为此我总是覆盖我的类的clone() 方法并相应地对其进行编码。但是这些类上从来没有任何列表、集合或映射,它们只有字符串、整数、浮点数。在这种情况下我该如何做深拷贝?
【问题讨论】:
标签: java list arraylist abstract-class linked-list