[英]Java private method hiding public accessors
我有這樣的課:
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;
}
}
在正常使用中,此類的行為與您期望的一樣。 方法getCompound
和setCompound
獲取並設置化合物列表。 但是,我將此類用作在使用JAX-WS構建的Web服務中傳遞的對象。 當JAX-WS編譯器看到此類時,它將忽略setCompound
和getCompound
訪問器,並且XSD中出現的唯一屬性是bar
。
在一天中的大部分時間里把頭撞在牆上之后,我決定嘗試將私有方法isCompound
的名稱更改為isACompound
,突然一切都按您期望的那樣工作。 JAX-WS為compound
屬性創建了正確的模式。
似乎正在發生的事情是,JAX-WS看到了isCompound
方法(即使它是私有的)並將其視為沒有相應setter的getter,因此忽略了compound
的真正公共訪問者。
Java Bean規范中是否有任何內容說明您不能擁有私有的is<Something>
方法,其中<something>
也是非布爾屬性的名稱,該屬性也具有自己的訪問器? 當然,在類上使用反射的任何東西都應該簡單地忽略私有方法?
如果您進行更改會發生什么:
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.