gpt4 book ai didi

java - java接口(interface)中静态的替代品是什么

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:29 25 4
gpt4 key购买 nike

我有一个设计问题。我有一个读取 XML 的接口(interface)。每个实现者类读取不同的 XML,我想要一种方法来识别应该为我获得的 xml 类型动态创建哪个实现者。问题是java接口(interface)不能有静态成员。最好的方法是什么?

示例:

public interface MyXML{
public void readXML(String xml);
public final static String getType();
}

用法:

func(String xml, String type)
{
MyXML obj;

switch(type)
{
case MyImpl.getType():
obj = new MyImpl();
break;
case MyImpl2.getType():
obj = new MyImpl2();
break;
}
obj.readXML(xml);
}

编辑:我会尽力更好地解释我想要的:我需要知道哪个实现可以读取哪个 xml,并且我寻找一种方法来强制实现 MyXML 的任何人告诉它可以读取哪个 xml,这样我就不需要在另一个列表或工厂中维护外部翻译。

最佳答案

Java 只允许在接口(interface)中使用静态常量。在 Java 8 中,您还可以拥有默认实现,但这是另一回事。

解决这个问题的一种方法是使 getType 成为普通实例方法,与 readXML 相同,并提前实例化实现,如下所示

// somewhere in the constructor or main
List<MyXML> readers = Arrays.asList(new MyImpl1(), new MyImpl2());

public MyXML findReaderForType(String type) {
for (MyXML reader : readers) {
if (reader.getType().equals(type)) {
return reader;
}
}
}

但是,您需要小心地设计实现,以便可以重用它们。

另一种选择是创建某种静态工厂,其中包含与 findReaderForType 方法等效的内容。那么类型和实现之间的映射就包含在这个工厂类中。

关于java - java接口(interface)中静态的替代品是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com