Java Specによると、デフォルトのコンストラクタを使用すると、1つを定義しない場合、コンパイラによって提供されていない、引数を持つコンストラクタです:プライベートコンストラクタはデフォルトのコンストラクタですか?
Java言語仕様:
8.8。 9。デフォルトのコンストラクタ
クラスにコンストラクタ宣言が含まれていない場合、デフォルトコンストラクタが暗黙的に宣言されます。トップレベルのクラス、メンバクラス、またはローカルクラスのデフォルトコンストラクタの形式は、次のとおりです。
デフォルトのコンストラクタは、クラス(6.6)と同じアクセシビリティを持ちます。
デフォルトのコンストラクタには非公開の内部メンバークラス以外の仮パラメータはありません。デフォルトのコンストラクタは、クラスのすぐ上にくるインスタンスを表す仮パラメータを暗黙的に宣言します(§8.8.1、§15.9.2、 §15.9.3)。
デフォルトコンストラクタにはスロー句がありません。
宣言されているクラスが基本クラスObjectの場合、デフォルトのコンストラクタには空の本体があります。それ以外の場合、デフォルトのコンストラクタは引数なしでスーパークラスのコンストラクタを呼び出すだけです。私はメソッドを作成し、静的を抽出することに決めました、いくつかのJAXBマッピングと協力して、IDEたが、私はいつも、今日、それはまたパブリックコンストラクタする必要があると思ったが、き
私のコンストラクタは自動的に私的なものになりました。
編集:
だから私は、私はもう引数なしのコンストラクタを必要としないことに気付きましたし、それを削除しました。
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
org.yourproject.YourClass does not have a no-arg default constructor.
JAXBはプライベート引数なしのコンストラクタで作業を行いますが、私はそれを削除すると、引数なしのデフォルトコンストラクタを求めて上記のエラーメッセージが記録されますので、JAXBには、次のメッセージをログに記録動作を停止しました。
私の質問は:プライベートの引数なしのコンストラクタとも呼ばれるデフォルトのコンストラクタ?
@XmlRootElement(name = "getagentstatus")
public class EccpGetAgentStatusRequest extends EccpAbstractRequest {
public static EccpGetAgentStatusRequest create(String agentNumber) {
return new EccpGetAgentStatusRequest(agentNumber);
}
@XmlElement(name = "agent_number")
private String agentNumber;
private EccpGetAgentStatusRequest() {
}
private EccpGetAgentStatusRequest(String agentNumber) {
this.agentNumber = agentNumber;
}
}
要求ラッパー::ここで
は私のJAXBマッピングが(ゲッターとセッターは省略)です
@XmlRootElement(name = "request")
public class EccpRequestWrapper {
@XmlAttribute
private Long id;
@XmlAnyElement
private IEccpRequest request;
public void setRequest(IEccpRequest request) {
this.id = request.getId();
this.request = request;
}
}
、ここで私のテストコードは次のとおりです。
public class Test {
public static void main(String... args) {
try {
EccpGetAgentStatusRequest wrapped = EccpGetAgentStatusRequest.create("Agent/1000");
EccpRequestWrapper requestWrapper = new EccpRequestWrapper();
requestWrapper.setRequest(wrapped);
JAXBContext jc = JAXBContext.newInstance(EccpRequestWrapper.class, wrapped.getClass());
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(requestWrapper, System.out);
} catch (JAXBException ex) {
ex.printStackTrace();
}
}
}
_第3版_ ?! [最新版](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8.9)を参照してください。 _デフォルトコンストラクタは、class_と同じアクセシビリティを持ちます。 –
Ok @Sotirios Delimanolis、現在に更新されました。しかし、あなたのコメントは私の質問に答えるものではありません。あなたはそれを再び読むことができますか? – Jaumzera
_そして、IDEは私のコンストラクタを自動的に私的なものにしています_それはコンパイラによって提供されておらず、デフォルトのコンストラクタでもありません。しかし、私はXMLデシリアライザが何か「public」を探していて、誤解を招くエラーメッセージがあると思います。 –