gpt4 book ai didi

隐藏公共(public)访问器的 Java 私有(private)方法

转载 作者:行者123 更新时间:2023-11-29 08:50:01 25 4
gpt4 key购买 nike

我有这样一个类:

import java.util.List;
import java.util.String;
import javax.xml.bind.annotation.XmlType;

@XmlType
public class Foo {
private List<Foo> compound;
private String bar;

// private method used internally to know
// if this is a compound instance
private boolean isCompound() {
return compound != null && compound.size() != 0;
}

// public setter for compound instance var
public void setCompound(List<Foo> compound) {
this.compound = compound;
}

// public getter for compound instance var
public List<Foo> getCompound() {
return compound;
}

public void setBar(String bar) {
this.bar = bar;
}

public String getBar() {
return bar;
}
}

在正常使用中,该类的行为符合您的预期。方法getCompoundsetCompound获取和设置化合物列表。但是,我将此类用作在使用 JAX-WS 构建的 Web 服务中传递的对象。当 JAX-WS 编译器看到这个类时,它会忽略 setCompoundgetCompound访问器,并且出现在 XSD 中的唯一属性是 bar .

在我的头撞墙了大半天之后,我决定尝试更改私有(private)方法的名称 isCompoundisACompound突然间一切都如你所愿。 JAX-WS 为 compound 创建了正确的模式属性(property)。

似乎正在发生的是 JAX-WS 看到了 isCompound方法(即使它是私有(private)的)并将其视为没有相应 setter 的 getter,因此忽略了 compound 的真正公共(public)访问器.

Java Bean 规范中是否有任何内容表明您不能拥有私有(private) is<Something>方法在哪里 <something>也是非 boolean 属性的名称,它也有自己的访问器?当然,任何在类上使用反射的东西都应该简单地忽略私有(private)方法吗?

最佳答案

如果你改变会发生什么:

 return compound != null && compound.size() != 0;
//To:
private boolean isCompound() {
boolean check = false;
if(compound !=null && compound.size()!=0){
check = true;
}else{
check =false;
}
return check;
}

//or
@XmlAccessorType(XmlAccessType.NONE) on the class and @XmlElement and @XmlAttribute on the get/set methods.

关于隐藏公共(public)访问器的 Java 私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215799/

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