2017-03-01 2 views
5

Lombok manque l'annotation du champ lors de la génération automatique du constructeur. Existe-t-il un moyen de conserver l'annotation du champ dans les paramètres d'entrée du constructeur?Lombok - conserve l'annotation du champ dans les paramètres d'entrée du constructeur

classe pour générer de constructeur,

@RequiredArgsConstructor(onConstructor = @__(@Inject)) 
public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyHandler") 
    private final SomeHandler handler; 
} 

classe générée:

public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyField") 
    private final SomeHandler handler; 

    @Inject 
    public Test(final String field, final SomeHandler handler) { 
     this.field = field; 
     this.handler = handler; 
    } 
} 

classe souhaitée:

public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyHandler") 
    private final SomeHandler handler; 

    @Inject 
    public Test(@Named("MyField")final String field, 
       @Named("MyHandler")final SomeHandler handler) { 
     this.field = field; 
     this.handler = handler; 
    } 

} 
+0

Je ne pense pas que cela ait été implémenté comme suit: https://groups.google.com/forum/#!topic/project-lombok/2vaujDkV8Nw – Cheetah

+0

@Cheetah J'ai peur, vous avez raison. J'ai commencé à l'implémenter il y a des années, mais c'était plus compliqué que je ne le pensais. Personne ne s'en souciait et j'ai découvert que j'en avais moi-même rarement besoin et qu'il y avait une solution de contournement. – maaartinus

Répondre

0

Il serait plus prolixe que simplement écrire le constructeur lui-même si elle serait ont été mis en œuvre par Lombok. Définissez le constructeur manuellement ou annotez les champs si possible.

+1

Je ne suis pas d'accord. Cela pourrait être aussi simple qu'annoter le champ (qui seul ne fait rien pour l'injection du constructeur) et laisser lombok le déplacer vers la liste d'arguments du constructeur qu'il génère. – maaartinus

4

Il n'y a pas une telle fonctionnalité et il semble que personne ne s'en soucie. J'ai proposed it once et a commencé à l'implémenter, mais a abandonné (pas de demande et trop de travail).

Il pourrait ressembler à

@RequiredArgsConstructor([email protected]__(@Inject)) 
public class Something { 
    @OnConstructor(@Named("userName")) 
    private final String userName; 

    @OnConstructor(@Named("userPassword")) 
    private final String userPassword; 

    private final int anotherField; 

    private final int yetAnotherField; 
} 

ou peut-être juste

@RequiredArgsConstructor(
    [email protected]__(@Inject), 
    [email protected]__(@Named)) 
public class Something { 
    @Named("userName") 
    private final String userName; 

    @Named("userPassword") 
    private final String userPassword; 

    private final int anotherField; 

    private final int yetAnotherField; 
} 

ou il pourrait être contrôlé à l'aide lombok.config que vous voulez probablement toutes les annotations @Named à déplacer au constructeur. J'ai peur, si vous le voulez, alors vous devez le faire vous-même (ma mise en œuvre incomplète pourrait vous aider un peu).

FTR: Il y a un feature request maintenant.