gpt4 book ai didi

java - 将内核模型传输到 Java 中的输出模型

转载 作者:行者123 更新时间:2023-11-30 09:43:52 25 4
gpt4 key购买 nike

这里我有一些代码可以将内核模型“传输”到外部插件的“输出”模型。

为此,我根据传递的 OldConnection 的具体子类型创建新实例,并将旧实例传递(通过强制转换)到构造函数中,这样我就可以轻松维护 getter 和 setter 的内部数据。

因此,OldIncoming、OldOutgoing 和 OldExpected 是 OldConnection 的子类型。 MyNewIncoming、MyNewOutgoing 和 MyNewExpected 是 MyNewConnection 的子类型。不幸的是,我无法更改内核模型并且我需要构造函数中的具体类型。

代码看起来很丑,但我找不到更好的解决方案,有什么想法吗?

private MyNewConnection createIConnectedSubtypeInstance(OldConnection connection) {

if (connection instanceof OldIncoming){
return new MyNewIncoming((OldIncoming) connection);
}
if (connection instanceof OldOutgoing){
return new MyNewOutgoing((OldOutgoing) connection);
}
.
.
.
if (connection instanceof OldExpected){
return new MyNewExpected((OldExpected) connection);
}

return new MyNewConnection(connection);
}

最佳答案

另一种方法是一堆重载方法,如下所示:

private MyNewIncoming createIConnectedSubtypeInstance( OldIncoming connection ) {
return new MyNewIncoming( connection );
}

然而,只有当调用者知道 connection 的类型时,它才有效,否则您将不得不依赖那些 instanceof 检查。

在那种情况下,您还可以有一些映射 OldClass->NewClass 并使用反射来创建实例,但我怀疑这是否值得,除非您需要大量映射。 p>

例子:

Map<Class<? extends OldConnection>, Class<? extends NewConnection>> mapping; //initializing is up to you

public NewConnection createIConnectedSubtypeInstance(OldConnection connection) {
try {
Class<? extends NewConnection> subtype = mapping.get( connection.getClass() );
return subtype.getConstructor( connection.getClass() ).newInstance( connection );
} catch( Exception e) { //you might want to catch the more specific types
//handle appropriateley
}
}

请注意,这依赖于直接映射的 connection 类。如果映射父类(super class),如果找不到 connection 的实际类的映射,则可能必须检查这些父类(super class)。

此外,这依赖于新实例的构造函数只接受映射类类型的一个参数。

关于java - 将内核模型传输到 Java 中的输出模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179456/

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