java - 在接口(interface)的所有子类中施加静态变量

标签 java interface static

我有一个界面Calculator它塑造了一个计算一些结果并以给定模式返回它们的类。

interface Calculator {
    List<Object> getResults();
    List<String> schema();
}

它的每个子类都有不同的模式,因为它们不计算完全相同的东西。但是同一子类的所有实例都具有相同的架构,因为它每次都以相同的方式进行计算。

问题是我想在代码中的其他地方访问该模式而无需计算任何内容,因为计算可能会很昂贵。

理想情况下,我希望每个子类都有自己的 public static final List<String> SCHEMA属性。但由于静态属性/方法不能被覆盖,我不能要求 Calculator 的所有子类接口(interface)实现它。

有没有办法解决,或者我必须在计算结果时存储架构,并传递此架构以供以后使用? (我猜这可能会变得乏味)

最佳答案

对于字符串常量,您可以使用运行时类注释作为模式, 和运行时检查:

default List<String> schema() {
    Schema schema = getClass().getAnnotation(Schema.class);
    if (schema == null) {
        throw new IllegalStateException("Class is missing @Schema annotation: "
            + getClass().getName());
    }
    return schema.getValues();
}

@Schema({"e", "pi", "i"})
public class ScientificCalculator implements Calculator { ... }

可以通过覆盖 schema() 来完成更多动态的事情。

关于java - 在接口(interface)的所有子类中施加静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951470/

相关文章:

Django - 服务和管理静态内容的权限

java - 当前 worker 是否参与工作窃取?

java - 使用 bufferedimage java 设置图像 src

delphi - 我可以将 Base 接口(interface)类型强制转换为 Derived 接口(interface)类型吗?

java - 在 Java 中使用函数指针作为简单的命令行解释器

python - Python中的静态类

java - 每次 Java 更新时,web start jar 验证都会变慢

java - 这些代码块之间有什么区别?

java - Java 中的接口(interface)敏感操作

c++ - 我可以有一个异常的静态全局实例吗?