簡體   English   中英

Java私有方法隱藏公共訪問器

[英]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;
    }
}

在正常使用中,此類的行為與您期望的一樣。 方法getCompoundsetCompound獲取並設置化合物列表。 但是,我將此類用作在使用JAX-WS構建的Web服務中傳遞的對象。 當JAX-WS編譯器看到此類時,它將忽略setCompoundgetCompound訪問器,並且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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM