private final ist doof bei JAXB

Eclipse kann beim Speichern Aktionen ausführen. So

  • räumt es automatisch die import-Anweisungen auf,
  • entfernt Weißraum am Ende einer Zeile,
  • setzt @Overide an überschriebenen Methoden

Zum Testen habe ich heute morgen eine Einstellung gesetzt, die mir Attribute, die final gemacht werden können, auch final macht. Fand ich nett.

Doch dann kam der Abend. Plötzlich initialisierte meine App keine JAXB Beans mehr ein. Es kostete mich 10 Minuten herauszufinden, dass diese blöde Einstellung das Problem verursacht. Denn wenn statt

@XmlRootElement( name = "course" ) 
@XmlAccessorType( XmlAccessType.FIELD ) 
public class Course 
{ 
  private String htmlkeywords = ""; 
  private String htmlhead = ""; 

steht

… 
public class Course 
{ 
  private final String htmlkeywords = ""; 
  private final String htmlhead = "";

dann wird JAXB die finalen Variablen natürlich nicht mehr initialisieren können. Meine Beans werden nur gelesen, sodass kein Setter die Variablen verändert – die Beans sind immutable. Die Eclipse Save Einstellung das final magisch dranzusetzen passt dazu nicht.

Über Christian Ullenboom

Ich bin Christian Ullenboom und Autor der Bücher ›Java ist auch eine Insel. Einführung, Ausbildung, Praxis‹ und ›Java SE 8 Standard-Bibliothek. Das Handbuch für Java-Entwickler‹. Seit 1997 berate ich Unternehmen im Einsatz von Java. Sun ernannte mich 2005 zum ›Java-Champion‹.

Ein Gedanke zu „private final ist doof bei JAXB

  1. Aber was soll man machen, wenn man diese Code-Formatierung behalten möchte? Jedes mal deswegen protected setter generieren bläht die Klasse nur unnötig auf…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.