Lombok 的 `@Builder` 注释顽固地保留 package - private
Lombok's `@Builder` annotation stubbornly stays package - private
我有以下 @Builder
- 注释 class:
@Data
@Builder(access = AccessLevel.PUBLIC)
@Entity
public class LiteProduct
{
// Minimal information required by our application.
@Id
private Long id; // Unique
private String name;
private Long costInCents;
private String type;
// Model the product types as a Hash Set in case we end up with several
// and need fast retrieval.
public final static Set<String> PRODUCT_TYPES = new HashSet<>
(Arrays.asList("flower", "topical", "vaporizer", "edible", "pet"));
// Have to allow creation of products without args for Entities.
public LiteProduct()
{
}
public LiteProduct(@NonNull final Long id, @NonNull final String name,
@NonNull final String type, @NonNull final Long costInCents)
{
if(!PRODUCT_TYPES.contains(type))
{
throw new InvalidProductTypeException(type);
}
this.name = name;
this.id = id;
this.costInCents = costInCents;
}
每当我想使用据称 Lombok
提供给我的生成器 class 时,尽管 IDE 似乎检测得很好:
我收到有关其可见性的编译时错误:
我查看了一些变通方法,例如 this or this,它们似乎都暗示我的问题应该已经自动解决并且 Lombok
默认生成 public
Builder classes。这似乎并没有从我的输出中暗示出来,即使我将参数 access=AccessLevel.PUBLIC
放入 LiteProduct
的 @Builder
注释中也不会发生。有任何想法吗?这个 class 也是一个 @Entity
这个事实有什么问题吗?还有什么我没有检测到的吗?
// 编辑:我确定当我将 class 移动到与我从中调用构建器模式的包相同的包中时,它工作得很好。这是 不是 一个 @Entity
问题,而是一个包可见性问题,根据我正在阅读的内容应该 不是 存在。
问题是我使用以下代码行来创建 LiteProduct
的实例:
return new LiteProduct.builder().build();
而不是:
return LiteProduct.builder().build();
这是 @Builder
注释允许您执行的操作。显然 builder()
就像 Builder
的工厂方法,它已经为您调用了 new
。
我有以下 @Builder
- 注释 class:
@Data
@Builder(access = AccessLevel.PUBLIC)
@Entity
public class LiteProduct
{
// Minimal information required by our application.
@Id
private Long id; // Unique
private String name;
private Long costInCents;
private String type;
// Model the product types as a Hash Set in case we end up with several
// and need fast retrieval.
public final static Set<String> PRODUCT_TYPES = new HashSet<>
(Arrays.asList("flower", "topical", "vaporizer", "edible", "pet"));
// Have to allow creation of products without args for Entities.
public LiteProduct()
{
}
public LiteProduct(@NonNull final Long id, @NonNull final String name,
@NonNull final String type, @NonNull final Long costInCents)
{
if(!PRODUCT_TYPES.contains(type))
{
throw new InvalidProductTypeException(type);
}
this.name = name;
this.id = id;
this.costInCents = costInCents;
}
每当我想使用据称 Lombok
提供给我的生成器 class 时,尽管 IDE 似乎检测得很好:
我收到有关其可见性的编译时错误:
我查看了一些变通方法,例如 this or this,它们似乎都暗示我的问题应该已经自动解决并且 Lombok
默认生成 public
Builder classes。这似乎并没有从我的输出中暗示出来,即使我将参数 access=AccessLevel.PUBLIC
放入 LiteProduct
的 @Builder
注释中也不会发生。有任何想法吗?这个 class 也是一个 @Entity
这个事实有什么问题吗?还有什么我没有检测到的吗?
// 编辑:我确定当我将 class 移动到与我从中调用构建器模式的包相同的包中时,它工作得很好。这是 不是 一个 @Entity
问题,而是一个包可见性问题,根据我正在阅读的内容应该 不是 存在。
问题是我使用以下代码行来创建 LiteProduct
的实例:
return new LiteProduct.builder().build();
而不是:
return LiteProduct.builder().build();
这是 @Builder
注释允许您执行的操作。显然 builder()
就像 Builder
的工厂方法,它已经为您调用了 new
。