java - 条件接口(interface)实现

标签 java class interface locale

我想问一下是否有可能的方法来有条件地实现接口(interface),或者是否可以解决我想做的事情。我想制作两个接口(interface) LangA 和 LangB,它们将只包含大量最终变量,这些变量是用于打印消息的字符串。正如您可能想象的那样,LangA 是一种语言而 LangB 是另一种语言。我想要的是让我的消息处理类根据系统的语言环境有条件地实现所需的接口(interface)。我不知道这是否可以以任何方式实现,即使是使用一些自定义库,所以如果没有,请向我解释一下它是否至少可以解决。 (小问题:这在 Scala 中可行吗?谢谢!)
我想到了一个可能但可能不是非常节省资源的工作方法,它将让类的构造函数检查语言环境并根据某些无方法类的值设置自己的 final ,这些无方法类只会以每种语言的 final 为特色(例如构造函数得知语言环境是 locA,因此它设置了 finals myF1=LangA.myF1; myF2=LangB.myF2; 等)提前致谢!

最佳答案

不,这是不可能的。

“类 X 实现接口(interface) Y” 关系在编译时是固定的,不能在运行时更改。

但是,使用接口(interface)将常量导入类是一种可以追溯到 Java 1.0 的解决方案。 This anti-pattern should not be used for new development .

此外,使用编译时常量进行本地化不是 Java 中的 native 解决方案。你应该localize using resource bundles .

如果您需要一种在运行时切换实现的方法,请将常量替换为接口(interface)中的方法,并提供返回不同常量的实现:

 interface Constants {
     double getAccelerationDueToGravity();
 }

 class EarthConstants implements Constants {
     double getAccelerationDueToGravity() {
         return 9.8;
     }
 }

 class MarsConstants implements Constants {
     double getAccelerationDueToGravity() {
         return 3.71;
     }
 }

关于java - 条件接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330908/

相关文章:

java - JDBC中如何知道DDL语句是否执行成功?

html - DIV 内的边距

Perl - 从父类(super class)(OO)调用子类构造函数

web-applications - 任何应用程序如何工作?

go - IntelliJ IDEA : Jump from interface to implementing method in Go

java - 我们应该@Override 接口(interface)的方法实现吗?

java - 如何从标准输入读取直到 EOF

java - 为什么我无法访问存储在 ArrayList 元素中的对象的属性?

java - 从当前 COME 后期绑定(bind)对象获取进程 ID

php - 使用 OOP 在 PHP 中组合大量函数(某种 namespace )?