java - 为每个类对象共享通用处理代码的最简洁、最有效的方法是什么?

标签 java inheritance refactoring

我有一系列类(class),A , B , C ...(总共几十个)共享通用代码。每个类可以有多个实例A , B , C ....我计划创建一个父类(super class),Abstract ,它将包含该代码。

问题是,通用的东西适用于每个类(而不是每个实例)唯一的对象。 目前已由 A 解决, B , C ...每个都有一个具有相应值的静态字段。显然,当我将功能重构为Abstract时,这个需要改成别的东西。

实际上,它目前看起来像这样(请注意,实际类型不是 String ,这仅用于演示目的):

public class A implements CommonInterface {

    private static final String specificVar = "A";

    @Override
    public void common() {
        specificVar.contains('');
    }
}
public class B implements CommonInterface {

    private static final String specificVar = "B";

    @Override
    public void common() {
        specificVar.contains('');
    }
}

到目前为止我想到的最好的主意就是拥有一个 Map<Class<? extends Abstract>,K> (其中 K 是相关类型) Abstract 中的静态字段,和A , B , C ...每个都包含一个静态初始化 block ,将相关值放入映射中。但是,我不相信这是最好的办法。

请注意,我没有使用任何 DI 框架。

那么,就子类中包含的代码而言,重构 A 中的静态字段的最简洁方法是什么? , B , C ...由通用代码处理,而不牺牲字段访问效率?

最佳答案

也许枚举就是您想要的。

enum MyInstances implements MyInterface {
    A {
       fields and methods for A
    }, B {
       fields and methods for B
    };
    common fields for all MyInstances 

    common methods for all MyInstances 
}

// To lookup an instance
MyInstances mi = MyInstances.valueOf("A");

关于java - 为每个类对象共享通用处理代码的最简洁、最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864013/

相关文章:

运行 SoapUIMockServiceRunner 时出现 java.lang.NoSuchMethodError

java - BouncyCasSTLe 编码差异

Java 流利的构建器和继承

python - 自动数据库重构以与 OpenERP 中重构的 python 代码协调一致?

coding-style - 摆脱匈牙利符号的最佳方法?

c++ - 将基于桌面的 MFC C++ 应用程序转换为 Web 应用程序是否可行

java - JPasswordField 返回一些转换为字符串类型的哈希码

java - 我尝试连接数据库时出现错误

c# - F# 类将接口(interface)实现为私有(private)成员,为什么?

c - 结构合法值约束配置继承