Intellij Idea是否具有组合Java类(转发类生成)的功能

Intellij Idea是否具有组合Java类(转发类生成)的功能,java,intellij-idea,facade,Java,Intellij Idea,Facade,例如,我想扩展HashSet类,但我没有扩展该类,而是给我的新类一个私有字段,该字段引用现有类的实例。新类中的每个实例方法调用现有类的包含实例上的相应方法并返回结果。这是一种合成和转发方法 例如,我希望IDE基于Set生成ForwardingSet类: public class ForwardingSet<E> implements Set<E> { private final Set<E> s; public ForwardingSet

例如,我想扩展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.

}
public类ForwardingSet实现集合{
私人终场;
公共转发集(集合s){
这个.s=s;
}
公共布尔包含(对象o){
返回s.o;
}
公共布尔值为空(){
返回s.isEmpty();
}
……等等。
}
那么,我如何在
想法中生成它呢


附言:类似的问题是,但没有答案。

这可以使用以下功能完成:

  • 创建仅包含要委托给的字段的基本类:

    public class ForwardingSet<E> implements Set<E> {
         private final Set<E> s;
    }
    
    public类ForwardingSet实现集合{
    私人终场;
    }
    
  • 在本地
    s
    变量后单击鼠标右键,然后按“生成”

  • 在弹出窗口中选择“委派方法”,然后选择本地
    s
    变量

  • 选择要覆盖的所有内容

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


  • 我认为模板不适合这样做,因为还有很多问题有待解决:如何生成转发方法?如何生成构造函数?这几乎就是我目前所做的。而且很乏味。我正在寻找“一步走”的解决方案。此外,这种方法会导致人为错误。假设一个转发类有100多个方法,如果你忘记选择一个方法,你可能会得到一个错误,因为你没有从接口实现一个方法。如果我需要这样做,这通常是我自己做的方式(但在不同的编辑器中,因为Intellij不是我的主编辑器),在IDEA 2018.3中测试,@Override注释不再需要手动添加。