Я довольно новичок в лямбда-выражении Java 8
Я попробовал следующее и получил ошибку компиляции
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";
}
};
}
}
мой вопрос: "Можно ли использовать лямбда? Выражение как обычный объект. Я хочу сделать что-то вроде
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";
});
}
Я много занимался поиском, но безуспешно. Есть ли обходной путь? Спасибо заранее!
update : после лучшего понимания лямбда-выражения проблема заключается в том, как сообщить компилятору целевой тип лямбда-выражения для компиляции. Таким образом, ответ от ernest_k может быть улучшен как
return (MySupplier) () -> "this line will work";