【问题标题】:Add method for lists with lombok使用 lombok 为列表添加方法
【发布时间】:2014-02-14 10:25:19
【问题描述】:

我目前正在替换所有标准 POJO,以便将 Lombok 用于所有样板代码。

到目前为止,还没有发生任何问题,但是我在 lombok 实现中缺少的是没有生成的方法可以将一个对象添加到集合中。

生成的代码:

private List<Object> list = new ArrayList<>();

public Object getObject(){..}

public void setObject(List<Object> o){..}

我想要额外的:

public void addObject(Object o) {..}

有人知道这是否会很快实现,或者这是否不可能?

【问题讨论】:

  • 所以使用生成的 getter - 它返回您的列表 - 然后添加。如果您不喜欢它 - 您可以随时包装自己的类并向其添加方法。
  • Lombok 的功能 @Singular 完全符合您的要求。
  • 2021 年更新:我对 Kotlin 非常满意,它减少了 Lombok 所针对的几乎所有样板代码。不要害怕语言切换 - 与 Java 的兼容性完全是 AFAICT,我在 cca 1 周内学会了 Kotlin。

标签: java lombok


【解决方案1】:

1) 我找不到票,根据对另一个答案的评论,我提交了一张:https://github.com/rzwitserloot/lombok/issues/1905 所以让我们看看:)

2) 对于单个集合,@Delegate 似乎可以完成这项工作:

interface CollectionAdders<E> {
  boolean add(E e);
  boolean addAll(Collection<? extends E> c);
}

interface ListGetters<E> {
  E get(int index);
}

class Foo {
  @Delegate(types={CollectionAdders.class, ListGetters.class})
  List<String> names = new ArrayList<>();
}

生成:

Foo#add(E e)
Foo#addAll(Collection<? extends E> c)

Foo#get(int index)

查看此论坛帖子:https://groups.google.com/forum/#!topic/project-lombok/alektPraJ_Q

【讨论】:

  • 这很有趣,感谢关于这个问题的更新:-)
  • 不幸的是,Roel Spilker 驳斥了这一点,指出存在 @Builder@Singular,IMO 并未涵盖对集合操纵器的简写需求。你可以去那里投票:)
  • 由于泛型,这似乎对我不起作用,因为@Delegate 没有办法指定泛型类型,因此它将默认为 Object。
【解决方案2】:

目前这肯定是不可能的。有这样的提议,但优先级低(甚至被拒绝)。

其实我已经找不到了。您可能想在issue list 上尝试一下。

现在,我偶然发现了这个 thread,它展示了一个仅限于单个变量的有趣解决方法。

坏消息

这在不久的将来不太可能实现。有太多的功能请求需要全部实现和维护(或其中任何重要的部分)。见this issue comment

【讨论】:

  • 完全披露:我是 Lombok 开发人员之一。这在我们的清单上,但我认为这没有问题。但它在我们自己的愿望清单上相当高。我们正在考虑不同的方法,并自己定期讨论这些方法。如果我们有不错的提案,我们会向 google 群组发送邮件。
  • 万一有人发现这个。如果您不介意使用构建器,可以使用 @Singular 注释
  • @rsavchenko 这正是我的要求。谢谢你!
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
相关资源
最近更新 更多