gpt4 book ai didi

java - 使用泛型避免在这个抽象工厂中陷入沮丧

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

我有以下对象

interface Adapter<T> {
T fromXml(XML xml);
XML toXml(T obj); //ignoring this in implementations
}

abstract class AbstractAdapter<T> implements Adapter<T>{
T fromXml(XML xml) { //template method
validate(xml);
return parse(xml);
}
abstract void validate(Xml xml);
abstract T parse(Xml xml);
}

class MyObjectAdapter extends AbstractAdapter<MyObject> {
MyObject parse(XMl xml) {return null;}
void validate(Xml xml) {}
}

class AnotherObjectAdapter extends AbstractAdapter<AnotherObject> {
AnotherObject parse(XMl xml) {return null;}
void validate(Xml xml) {}
}

class AdapterFactory {
Adapter<?> createAdapter(String objectType) {
if (objectType == "MyObject") return new MyObjectAdapter();
if (objectType == "AnotherObject") return new AnotherObjectAdapter();
}

public static void main(String args[]) {
AdapterFactory factory = new AdapterFactory();
//********
Adapter<MyObject> myobjectAdapter = (Adapater<MyObject>) factory.createAdapter("MyObject");
MyObject obj = myobjectAdapter.fromXml(getXml(args));
}

如何避免在上面标记为 ** 的行中进行向下转换?需要适配器的对象之间没有任何关系,它们是通用数据对象。

最佳答案

您在 String 中有一个类名,并且您正在尝试从该类名转换为实际类型。这总是会涉及 Actor 阵容。如果删除 AdapterFactory 以及 String,那么就没有问题。

(通常请注意,String 上的 == 通常不是您想要的。)

关于java - 使用泛型避免在这个抽象工厂中陷入沮丧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784593/

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