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