Arrozal
Uno de mis POJO tiene un campo de objeto booleano para permitir NULLS en la base de datos (un requisito). ¿Es posible usar la anotación @Data Lombok a nivel de clase y anular el getter para el campo booleano? El valor predeterminado que genera es el método getXXX para el campo booleano. Deseo anularlo como isXXX()?
Gracias,
Arrozal
Ruakh
Es un poco detallado, pero puede proporcionar su propio isXXX
y luego usar AccessLevel.NONE
decirle a Lombok que no genere el getXXX
:
@Data
public class OneOfPaddysPojos {
// ... other fields ...
@Getter(AccessLevel.NONE)
private Boolean XXX;
public Boolean isXXX() {
return XXX;
}
}
(Y oye, al menos no lo es bastante ¡Tan detallado como si no estuvieras usando Lombok para empezar!)
Creo que si cambias tu campo de Boolean X
a boolean X
que lombok generar un getter isX()
método.
-
Cierto, pero necesita tener el campo como
Boolean
si la columna admite valores NULL en el nivel de la base de datos. El problema es que con un campo primitivo (es decirboolean
) realmente no se puede decir si se supone que cierto valor es unNULL
o un cero (0
). De ahí la pregunta de OP.– Priidu Neemre
28 de abril de 2016 a las 7:44
Sé que la pregunta es antigua, pero dejaré esto para futuras referencias.
Tiene dos opciones para anular un Getter/Setter en su clase.
Una es la respuesta de la respuesta de la primera opción.
La otra opción es simplemente definir el método getter/setter y lombok no producirá automáticamente el método especificado.
Lo probé yo mismo y parece funcionar bien:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductResponse {
private UUID id;
private String supplierId;
private String sku;
private String name;
private String brand;
private String imgUrl;
private String description;
private BigDecimal price;
private Float quantity;
private String unit;
//@Getter(AccessLevel.NONE) //This means @Data will not produce a getter for this field so have to explicitly define it
private Set<ProductTag> tags;
//Here we override @Data getter with a different getter (return is different type)
public List<UUID> getTags() {
return tags.stream().map(ProductTag::getId).collect(Collectors.toList());
}
}
Aquí también hay una referencia de los comentarios del equipo de desarrollo: Comentario del desarrollador de Lombok
En mi ejemplo, estoy usando la función “anular” para un Collection
type pero esto se puede usar para cualquier otro tipo como Boolean
en tu caso.
-
En su caso, “funciona” porque el nombre de su captador personalizado coincide con el nombre que se supone que debe generar lombok. OP pregunta qué hacer si el nombre no coincide. en su caso son
isXXX()
ygetXXX()
.– Sasha Shpota
27 de diciembre de 2018 a las 14:01
-
¡Buena atrapada! Gracias por resaltar esto que pasé por alto en la pregunta.
–Rafael RS Robles
4 de enero de 2019 a las 9:49
¿Cuál es el nombre del campo booleano? de acuerdo con la doctor lombok:
Un getter predeterminado simplemente devuelve el campo y se llama getFoo si el campo se llama foo (o isFoo si el tipo de campo es booleano)
lombok generará getter con el nombre isXXX para su campo booleano
Desde Lombok documentación:
Siempre puede deshabilitar manualmente la generación de getter/setter para cualquier campo usando el nivel de acceso especial AccessLevel.NONE. Esto le permite anular el comportamiento de una anotación @Getter, @Setter o @Data en una clase.
Por definición, anular significa escribir su propio getXXX para el proporcionado por lombok. Si desea agregar su propio isXXX, es un método diferente. ¿Por qué no crea un isXXX en su POJO y en la implementación, llama a getXXX si es necesario o lo implementa de la manera que desee?
– Jay Z
9 de agosto de 2013 a las 4:07
He declarado @Data a nivel de clase y tengo demasiados atributos en la clase, por lo que será difícil excluir el captador o hacer que el captador predeterminado sea privado para un campo. De lo contrario, incluso si agrego un método isXXX, el método getXXX seguirá siendo visible para los usuarios de la clase de todos modos; preferiría usar el método getXXX en sí. Espero que entiendas mi contexto.
– arroz
9 de agosto de 2013 a las 4:31