Java 条件接口实现
我想问一下,是否有一种可能的方法可以有条件地实现接口,或者是否有一种解决方法可以解决我想要做的事情。我想创建两个接口LangA和LangB,它们只包含大量的最终变量,这些变量是用于打印消息的字符串。正如你可能想象的那样,LangA是一种语言,LangB是另一种语言。我想要的是让消息处理类根据系统的区域设置有条件地实现所需的接口。我不知道即使使用一些定制的图书馆,这是否在任何方面都是可能的,所以如果不是,请向我解释一下它是否至少可以被使用。(快速提问:这在Scala中可能吗?谢谢!)Java 条件接口实现,java,class,interface,locale,Java,Class,Interface,Locale,我想问一下,是否有一种可能的方法可以有条件地实现接口,或者是否有一种解决方法可以解决我想要做的事情。我想创建两个接口LangA和LangB,它们只包含大量的最终变量,这些变量是用于打印消息的字符串。正如你可能想象的那样,LangA是一种语言,LangB是另一种语言。我想要的是让消息处理类根据系统的区域设置有条件地实现所需的接口。我不知道即使使用一些定制的图书馆,这是否在任何方面都是可能的,所以如果不是,请向我解释一下它是否至少可以被使用。(快速提问:这在Scala中可能吗?谢谢!) 我想到了一个
我想到了一个可能的,但可能不是一个资源效率很高的Workaround,它将让类的构造函数检查区域设置,并根据某个无方法类的值设置自己的最终值,该类将只提供每种语言的最终值(例如,构造器知道区域设置是locA,所以它会设置myF1=LangA.myF1;myF2=LangB.myF2;等等)提前感谢!抱歉,这不是一个好的设计。如果您有大量消息,最好将它们存储在数据库中,并将它们缓存在一个对象中,以便您在内存中查找它们 接口只包含常量的想法在很长一段时间内都不可信 接口应该是关于分离方法和行为的,而不是常量 这些都是特定于语言环境的想法更强烈地指向数据库或消息包,或者-等等-一个
属性值的映射,以语言环境为键
如果必须持久化,则合成比继承更有可能。可以使用依赖项注入引擎(如Spring的BeanFactory
)向对象注入所需的消息
除了你发布的想法以外的任何东西。不,这是不可能的
“ClassX实现接口Y”关系在编译时是固定的,不能在运行时更改
但是,使用接口将常量导入类是一种可以追溯到Java 1.0的解决方案
此外,使用编译时常量进行本地化在Java中不是一个本机解决方案
如果需要在运行时切换实现的方法,请在接口中用方法替换常量,并提供返回不同常量的实现:
interface Constants {
double getAccelerationDueToGravity();
}
class EarthConstants implements Constants {
double getAccelerationDueToGravity() {
return 9.8;
}
}
class MarsConstants implements Constants {
double getAccelerationDueToGravity() {
return 3.71;
}
}
@duffymo的可能重复我认为不是,因为他问是否应该避免ConstantinterFaceAntippaten,而我问的是我是否可以有条件地实现一个接口。顺便说一句,就Antippaten而言,我必须实现多个类的接口,但为了便于解释,我只引用了一个类!我意识到这一点。你不应该这样做,一个或多个类。全错了。我想将相同的常量列表导入10多个类,我刚刚提到了一个,我知道这是一个反模式!谢谢你的快速回复!:)