Ajuda com a classe abstrata em Java com variável privada do tipo List <E>
Faz dois anos desde a última vez que codifiquei algo em Java, então minhas habilidades de codificação estão um pouco enferrujadas.
Preciso salvar dados (um perfil de usuário) em diferentes estruturas de dados,ArrayList
eLinkedList
, e ambos vêm deList
. Quero evitar a duplicação de código onde puder e também quero seguir as boas práticas de Java.
Para isso, estou tentando criar uma classe abstrata em que as variáveis privadas serão do tipoList<E>
e crie 2 subclasses, dependendo do tipo de variável.
O problema é que não sei se estou fazendo isso corretamente, você pode dar uma olhada no meu código:
Classe: 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;
}
}
Classe: 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());
}
}
Classe: 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) Isso faz algum sentido? O que estou fazendo errado? você tem alguma recomendação?
2) Faria mais sentido para mim ter os construtores emDBList
e chamando-os (comsuper()
) nas subclasses, mas não posso fazer isso porque não consigo inicializar uma variável comnew List<E>()
.
3) Pensei em fazer cópias profundas sempre que possível e, por isso, sempre substituo oclone()
método das minhas classes e codifique-o de acordo. Mas essas classes nunca tinham listas, conjuntos ou mapas, apenas tinham strings, ints, floats. Como faço cópias profundas nessa situação?