gpt4 book ai didi

java - 你能将一个对象转换为具有特定的功能吗?

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

我正在使用 jaxb/jaxws 库来处理 Soap 消息。当发生 SOAP 故障时,我必须将其转换为其中一种消息类型。也就是说,我做了这样的事情:

if(exceptionObject instanceof Message1Data){
Integer errorCode = ((Message1ExceptionData) exceptionObject).
getExceptionData().getErrorCode();
}
if(exceptionObject instanceof Message2Data){
Integer errorCode = ((Message2ExceptionData) exceptionObject).
getExceptionData().getErrorCode();
}
//...

用于一堆不同类型的消息。所有这些都具有 getErrorCode() 函数,但都是自动生成的,因此不存在任何类型的类继承。

因此,这变成了一长串 if 语句,只是为了获取始终存在的错误代码。有没有办法告诉编译器可以在对象上调用此函数,类似于我如何强制转换对象以访问某些函数。因此,我可以删除它并执行类似的操作,而不是执行一堆 if 语句

Integer errorCode = exceptionObject.getExceptionData().getErrorCode();

一次,而不是为每种类型的消息使用相同的代码?或者 jaxb/jaxws 中是否有一个选项可以告诉它每个类都实现一个接口(interface)? (缺少编写允许此操作的自定义库)

最佳答案

<强> JAXB2 Inheritance Plugin 允许您让您的类实现给定的接口(interface)或扩展某个类。

直接在架构中自定义:

<xs:complexType name="WillBeMadeCloneableType">
<xs:annotation>
<xs:appinfo>
<inheritance:implements>java.lang.Cloneable</inheritance:implements>
</xs:appinfo>
</xs:annotation>
<!-- ... -->
</xs:complexType>

或者在外部绑定(bind)文件中:

<jaxb:bindings node="xsd:simpleType[@name='MyType']">
<inheritance:implements>java.lang.Cloneable</inheritance:implements>
</jaxb:bindings>

您还可以使用泛型。

自定义 WSDL 有点棘手,但也是可能的。

披露:我是 JAXB2 Inheritance plugin 的作者这是 JAXB2 Basics 的一部分包。

文档目前正在移至 GitHub 。请检查以下链接:

关于java - 你能将一个对象转换为具有特定的功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637338/

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