【发布时间】:2017-10-01 20:12:15
【问题描述】:
我有一个这样的类层次结构:
public abstract class AbstractFoo {
abstractMethod(/*parameters*/) {
//do something;
}
}
public class Foo extends AbstractFoo {
public String doSomething(int id, int value, FooB b, FooC c) {
//do something;
}
public void doSomethingElse() {
abstractMethod(param1, param2);
}
}
我希望能够将doSomething 方法作为方法参数传递给abstractMethod。我尝试过这样的事情:
public abstract class AbstractFoo {
abstractMethod(/*parameters*/, Callable<String> method) {
//do something;
method.call();
}
}
public class Foo extends AbstractFoo {
Callable<String> doSomething = (int id, int value, FooB b, FooC c) -> {
//do something;
};
public void doSomethingElse() {
abstractMethod(param1, param2, doSomething);
}
}
但我收到以下错误:
Error:(37, 40) java: incompatible types: incompatible parameter types in lambda expression: wrong number of parameters: expected 0 but found 4
很明显,我没有正确执行此操作。实现我想要的正确 Java 8 方法到底是什么?
编辑1:基于cmets,这里尝试一个更好的解决方案:
@FunctionalInterface
public interface Fazz<T> {
String createStuff(int id, int value, T value1, T value2);
}
public abstract class AbstractFoo {
abstractMethod(Fazz<T> interfc) {
interfc.createStuff(/* pass parameters? */);
}
}
public class Foo extends AbstractFoo {
Fazz<String> doSomething = (int id, int value, String value1, String value2) -> {
//do something;
};
public void doSomethingElse() {
abstractMethod(doSomething);
}
}
【问题讨论】:
-
有点不清楚你在做什么以及为什么要做这样的事情......你可以定义一个带有 4 个参数的
@FunctionalInterface,或者将参数作为参数传递,但仍然传递一个 @ 987654328@;但无论哪种方式对我来说都没有意义
标签: java callback java-8 deferred callable