是否有一些模板或某些东西可以通过访问包装成员来实现iterface方法?
例如,假设我有
public class MyClass implements List<Something> {
private final List<Something> core;
...
}
现在我希望通过将调用传递给像
这样的包来实现List<Something>
@Override
public int size() {
return core.size();
}
等等。
答案 0 :(得分:27)
有。使用源菜单 - &gt;生成委托方法...
答案 1 :(得分:5)
我将更多地谈论“生成委托方法”重构如何用于创建您描述的转发类。
创建一个可选择实现接口的新类,并为其提供一个具有您想要删除的类型的字段,例如:
public class NewClass implements ThatInterface {
private final ThatInterface delegate;
public MyClass(ThatInterface delegate) {
this.delegate = delegate();
}
}
然后你应用eclipse重构。 (Cmd-3 deleg ...是一种访问它的简单方法。)选择新字段的复选框。它的所有方法都将作为代表添加。
(我认为,在Eclipse氧气的重构中存在一个错误,它会在界面上使用该关键字的方法复制default
关键字。您可能需要删除该关键字。 )
因此,对于List的委托,产生了重构:
public class NewClass {
private final List<String> delegate;
public NewClass(List<String> delegate) {
this.delegate = delegate;
}
public void forEach(Consumer<? super String> action) {
delegate.forEach(action);
}
public int size() {
return delegate.size();
}
public boolean isEmpty() {
return delegate.isEmpty();
}
public boolean contains(Object o) {
return delegate.contains(o);
}
依旧......
答案 2 :(得分:1)
在Luna中测试过。
使用快捷键 Alt - Shift - S , M 2次。按 Enter