java - 如何在不同类型的 ArrayList 中使用相同的方法?

标签 java class arraylist refactoring

我正在做一个应该存储在两个不同文本文件中的项目。假设我有 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 将由 PersonActivity 实现

Entity.java

public interface Entity {
    public Boolean equals(Entity e);
    //other common methods
}

此接口(interface)将由 PersonActivity 实现

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 类扩展到您的两个实现,即 RegistryPersonRegistryActivity

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/

相关文章:

java - 向现有的 java POJO 添加一个新的成员变量

java - 需要为用户生成每个学生的卷号吗?

java - 使用多个类。程序无法启动

c# - 静态类...这样做可以吗?

.net - vbScript System.Collections.ArrayList 对象不支持... list.Add

java - 用于在 ArrayList 中查找特定字符串的正则表达式

c# - 将 LINQ 表达式移植到 Java

java - gradle 构建模型时出错

java - 为什么在 Apache Tomcat 服务器上运行时无法访问 .properties 文件?

java - 打印对象的数组列表