gpt4 book ai didi

java - JiBX:如何在我的代码中继续使用接口(interface)?

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:23 27 4
gpt4 key购买 nike

如何在我想使用 JiBX 绑定(bind)的类中保留我的 using 接口(interface)?

例子:我在 Java 中有这个非常简单的模型:

public interface A {
B getB();
void setB(B b);
}

public interface B {
String getData();
void setData(String data);
}

public class AImpl implements A {
B b;

@Override
public B getB() {
return b;
}

@Override
public void setB(B b) {
this.b = b;
}
}

public class BImpl implements B {
private String data;
@Override
public String getData() {
return data;
}

@Override
public void setData(String data) {
this.data = data;
}
}

以及这份有约束力的文件:

<binding>
<mapping name="A"
class="com.test.AImpl">
<structure name="B" usage="optional" get-method="getB" set-method="setB"/>
</mapping>
<mapping name="B"
class="com.test.BImpl">
<value name="data" set-method="setData" get-method="getData" usage="optional"/>
</mapping>
</binding>

当我尝试运行我的代码时,我得到了这个异常:

java.lang.ClassFormatError: Method in class com/test/B has illegal modifiers: 0x1001

我尝试在两个映射上都使用“abstract="true"',结果却出现了这个异常:

...Caused by: org.jibx.runtime.JiBXException: Unable to access binding information for class com.test.A Make sure the binding has been compiled...

我找到的唯一解决方案是让 AImpl 持有 BImpl 而不是 B,并让 getter 返回 BImpl,setter 接收 BImpl。这是非常错误的,因为它完全破坏了界面。

我该如何解决这个问题?我一直在紧张不安,大发脾气(真正的问题要复杂得多,JiBX 神秘的错误消息无济于事)- 没有任何帮助。

这可以解决吗? JiBX 真的那么具有侵入性吗(因为它要求我放弃所有接口(interface)编程?)

请不要回答“使用 AbstractB”,因为这是同一个问题,只是删除了一个级别。

最佳答案

在映射中,您应该能够使用“create-type”属性来指定 JiBX 应该为具有接口(interface)类型的 bean 属性实例化的具体类。我经常将其用于集合属性。例如,您可以告诉 JiBX 为 java.util.Set 类型的属性实例化一个 java.util.HashSet。但我相信它同样适用于非 Collection 品。您的映射看起来像:

<mapping class="com.mypackage.AImpl" name="A">
<structure get-method="getB" set-method="setB" create-type="com.mypackage.BImpl">
...
</structure>
...
</mapping>

JiBX 将调用无参数构造函数来创建 B 对象。或者,如果您需要花哨的实例化逻辑,您可以使用工厂或自定义序列化器/反序列化器。参见 this reference page了解详情。

关于java - JiBX:如何在我的代码中继续使用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982263/

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