gpt4 book ai didi

java - 使用 List 类型的私有(private)变量帮助 Java 中的抽象类

转载 作者:行者123 更新时间:2023-12-01 19:23:12 25 4
gpt4 key购买 nike

自从我上次用 Java 编写代码以来已经有两年了,所以我的编码技能有点生疏。

我需要以不同的数据结构保存数据(用户配置文件),ArrayListLinkedList ,它们都来自List 。我希望尽可能避免代码重复,并且我还希望遵循良好的 Java 实践。

为此,我尝试创建一个抽象类,其中私有(private)变量的类型为 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() ),但我不能这样做,因为我无法使用 new List<E>() 初始化变量.

3) 我被认为尽可能进行深复制,为此我总是覆盖 clone()我的类的方法并相应地对其进行编码。但这些类从来没有任何列表、集合或映射,它们只有字符串、整数、 float 。在这种情况下如何进行深拷贝?

最佳答案

您不应该需要采用 LinkedList<UserProfile> 的子类和ArrayList<UserProfile>首先。与 List<UserProfile> 合作非常好,推荐(请参阅《Effective Java 第二版》,第 52 项:通过接口(interface)引用对象)。

请记住 LinkedList<E> implements List<E> ,和ArrayList<E> implements List<E> ,所以如果你取 List<E> ,您可以同时使用 LinkedList<E>ArrayList<E>已经(以及 List<E> 的所有其他实现者)。

<小时/>

关于clone()

现在很好理解 clone() Java 中已严重损坏,不应使用(请参阅《Effective Java 2nd Edition》,第 11 项:明智地覆盖克隆)。

来自an interview with author Josh Bloch :

If you've read the item about cloning in my book, especially if you read between the lines, you will know that I think clone is deeply broken [...] There are very few things for which I use Cloneable anymore [...] It's a shame that Cloneable is broken, but it happens.

相关问题

关于java - 使用 List<E> 类型的私有(private)变量帮助 Java 中的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com