我正在做一个应该存储在两个不同文本文件中的项目。假设我有 2 个类 Person 和 Activity,每个类只有这些共同的属性:id 和 isActive。但也有很多不常见的。
我还有 2 个类 ArrayList 类型:
public class RegistryPerson extends ArrayList<Person> {
public void add(Person obj){
....
}
public boolean isDuplicate(Person obj){
for(Person p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Person search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Person obj){
obj.setActivate;
}
//more methods
}
.
public class RegistryActivity extends ArrayList<Activity> {
public void add(Activity obj){
....
}
public boolean isDuplicate(Activity obj){
for(Activity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Activity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfileActivity);
}
public void activate(Activity obj){
obj.setActivate;
}
//more methods
}
两个类有相同的方法
如您所见,类型为 ArrayList RegitryPerson 和 RegistryActivigy 的两个类具有相同的方法,但有些使用了不同类型的对象。
我只是不想在不同的类中使用几乎相同的代码。我可以使用接口(interface)或抽象类吗?最重要的是,如何实现?还是我让一切都复杂化了?
谢谢。
最佳答案
可以关注Program to an interface, not implementations这里的设计原则。
创建一个 interface
say Entity
将由 Person
和 Activity
实现
Entity.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
此接口(interface)将由 Person
和 Activity
实现
Person.java
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
Activity.java
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
现在创建父类注册表
注册表.java
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
现在您可以将此 Registry 类扩展到您的两个实现,即 RegistryPerson
和 RegistryActivity
RegistryPerson.java
public class RegistryPerson extends Registry {
..
}
RegistryActivity.java
public class RegistryActivity extends Registry {
..
}
P.S.:上面列出的所有类都包含更多常用方法。这里只是简单介绍一下这个设计原理。
关于java - 如何在不同类型的 ArrayList 中使用相同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987710/