【问题标题】:Does Intellij Idea IDE has a feature to composite Java classes (forwarding class generation)Intellij Idea IDE 是否具有复合 Java 类的功能(转发类生成)
【发布时间】:2018-03-26 04:20:57
【问题描述】:

例如,我想扩展 HashSet 类,但我没有扩展该类,而是为我的新类提供了一个私有字段,该字段引用了现有类的实例。新类中的每个实例方法调用现有类的包含实例上的相应方法并返回结果。这是一种组合和转发方式。

即例如,我希望IDE 基于Set 生成ForwardingSet 类:

public class ForwardingSet<E> implements Set<E> {
     private final Set<E> s;

     public ForwardingSet(Set<E> s){ 
            this.s = s; 
     }

     public boolean contains(Object o){ 
            return s.contains(o); 
     }

     public boolean isEmpty(){
            return s.isEmpty();
     }


... and etc.

}

那么,我如何在Idea 中生成它?

P.S:类似的问题是here,但没有答案。

【问题讨论】:

标签: java intellij-idea facade


【解决方案1】:

这可以使用"Generate delegated method" 功能来完成:

  1. 创建一个仅包含您要委托给的字段的基本类:

    public class ForwardingSet<E> implements Set<E> {
         private final Set<E> s;
    }
    
  2. 在本地s变量后右键点击“生成”

  3. 在弹出窗口中选择“Delegate Methods”,然后选择本地s变量

  4. 选择要覆盖的所有内容

  5. (可选)使用复制和替换将public 替换为@Override public,然后为文件中的第一个公共手动删除它,以消除所有覆盖警告

【讨论】:

  • 这几乎是我目前所做的。而且很乏味。我正在寻找“一步到位”的解决方案。
  • 此外,这种方法会导致人为错误。让我们想象一个包含 100 多个方法的转发类。
  • 如果您忘记选择 1 个方法,您可能会收到错误消息,因为您没有从接口实现方法。如果我需要这样做,这通常也是我自己做的方式(但在不同的编辑器中,因为 Intellij 不是我的主要编辑器)
  • 在IDEA 2018.3中测试,@Override注解不再需要手动添加。
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2022-09-25
  • 1970-01-01
  • 2011-04-14
  • 2019-11-01
  • 2013-01-21
  • 2016-05-12
  • 1970-01-01
相关资源
最近更新 更多