我对 Java 8 的 lambda 表达式很陌生
我尝试了以下并得到编译错误
class Test{
static interface MySupplier {
Object supply();
}
public static void main(String[] args) {
Object v = value();
if (v instanceof MySupplier) {
v = ((MySupplier) v).supply();
}
System.out.println(v);
}
static Object value() {
// return () -> "this line will NOT get compiled."; //Error: incompatible types: Object is not a functional interface ???
// return (Object)(() -> "this line will NOT get compiled, too."); //Error: incompatible types: Object is not a functional interface ???
return new MySupplier() {
public Object supply() {
return "using inner class will work but lambda expression it not";
}
};
}
}
我的问题是“是否可以将 lambda 表达式用作普通对象。我想做一些类似的事情
static Object value(Object v) {
if (v instanceof MySupplier) {
return ((MySupplier) v).supply();
}
return v;
}
public static void main(String[] args) {
// if some case
Object v1 = value("value 1");
// else if some other case
Object v1 = value(() -> {
//do some stuff
return "value 2";
});
}
我做了很多搜索,但没有运气。有什么解决方法吗?提前致谢!
更新:在对 lambda 表达式有了更深入的了解之后,问题是如何让编译器知道要编译到的 lambda 表达式的目标类型。所以 ernest_k 的答案可以改进为
return (MySupplier) () -> "this line will work";