2010-10-18 17 views

Répondre

4

bien à Lombok une classe Java pourrait ressembler à ceci

import lombok.Data; 

@Data public class Cart { 
    private int id; 
    private DateTime created; 
    private int items; 
    private int status; 
} 

Alors que dans C# la même classe ressemblerait à ceci

public class Cart { 
    public int Id { get; set; } 
    public DateTime Created { get; set; } 
    public int Items { get; set; } 
    public int Status { get; set; } 
} 

So C# (3.0 dans cet exemple) obtient assez proche sans toutes les autres bibliothèques, mais au fur et à mesure que vous ajoutez "final" à certaines propriétés, la partie magique de Lombok "auto constructor" brille vraiment. Comme pour une alternative .Net, si je comprends bien les annotations .Net ne permettent pas d'intercepter le code d'octet avant qu'il ne passe au compilateur (ce que Lombok utilise pour un tel effet), donc vos options sont limitées à un modèle système + un script de construction comme nAnt. Ce serait un gâchis à maintenir.

+0

Vous ne pouvez pas intercepter la génération de code octet mais il existe des bibliothèques assez sophistiquées pour analyser les assemblages finaux. Vous pouvez utiliser des champs publics dans le code, puis procéder à une étape de post-construction pour réécrire tous les assemblages impliqués afin d'utiliser les propriétés générées automatiquement. Mais vous ne serez pas capable de réaliser tout ce que Lombok fait avec cette technique. Mieux vaut utiliser quelque chose comme T4 (génération de code) et des classes partielles. –

+3

@Jason votre code C# n'est pas vraiment équivalent au code Java: equals et hashCode sont manquants. Lombok génère cela aussi. – Jirka

+1

C'est vrai. Cela fait un certain temps que j'ai écrit cette réponse. J'ai appris beaucoup plus depuis mais je pense que mon point de vue est toujours valable. Ce Lombok fait beaucoup de choses automatiquement et la méthode qu'il utilise est (encore) unique à Java. –