我有一个界面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/