Помогите с абстрактным классом в Java с закрытой переменной типа List <E>
Прошло два года с тех пор, как я последний раз что-то кодировал на 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()
) в подклассах, но я не могу этого сделать, потому что я не могу инициализировать переменную сnew List<E>()
.
3) Считалось, что я делаю глубокие копии, когда это возможно, и для этого я всегда отменяюclone()
метод моих классов и код его соответственно. Но у этих классов никогда не было списков, наборов или карт, у них были только строки, целые числа, числа с плавающей запятой. Как мне сделать глубокие копии в этой ситуации?