我的界面看起来像
public interface ListAbstractor
{
List<String> getList();
void addTo(String s);
}
我想将它用于对具有多个List<String> get_xxxx
和void addToList(String)
函数的类进行get / set / verify操作的单元测试。我想用最少量的废物来声明它(我就是这样)。
我已经看到examples接口(使用一种方法)在可爱的一行lambda中实现:
interface IntegerMath {
int operation(int a, int b);
}
...
IntegerMath addition = (a, b) -> a + b;
我想实现它:
ListAbstractor la =
new ListAbstractor()
{
getList = ()-> settings.getZooKeeperList();
addTo = (s)-> settings.addToZookeeperList(s);
};
但是eclipse不喜欢这个。那么这种短暂的最甜蜜的做法是什么?
答案 0 :(得分:2)
常见的解决方案是在界面中创建一个特殊的静态方法来构造实例:
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
public interface ListAbstractor {
List<String> getList();
void addTo(String s);
public static ListAbstractor of(Supplier<List<String>> listSupplier,
Consumer<String> adder) {
return new ListAbstractor() {
@Override
public List<String> getList() {
return listSupplier.get();
}
@Override
public void addTo(String s) {
adder.accept(s);
}
};
}
}
无需创建其他功能接口,因为您可以重复使用标准接口。在Collector.of
静态方法中实现了一些类似的方法。
现在你可以写:
myTestFunction(ListAbstractor.of(settings::getZooKeeperList, settings::addToZookeeperList));
答案 1 :(得分:1)
我最终做的是将接口分成两个接口。这实际上比我想做的更少代码,所以赢。
myTestFunction(()-> settings.getZooKeeperList(),
(s)-> settings.addToZookeeperList(s));