2015-01-18 4 views

ответ

4

Если ReplyMessage является функциональным интерфейсом, вы могли бы сделать

paramsValues[idx++] = reply -> message.reply(reply); 

Вот полный пример с окурком реализациями других классов в вашем вопросе:

// Stub classes 
class JsonObject { } 

@FunctionalInterface 
interface ReplyMessage<T> { 
    void reply(T jo); 
} 

class LambdaDemo { 
    public static void main(String args[]) { 

     // Dummy variables 
     ReplyMessage<JsonObject> message = new ReplyMessage<JsonObject>() { 
      public void reply(JsonObject jo) {} 
     }; 
     ReplyMessage[] paramsValues = new ReplyMessage[5]; 
     int idx = 0; 

     // Your code, lambdafied 
     paramsValues[idx++] = reply -> message.reply(reply); 

     // Or, 
     // paramsValues[idx++] = message::reply; 

     // But then you could perhaps do with just ... 
     // paramsValues[idx++] = message; 
    } 
} 
+2

'сообщение :: ответить'? –

+0

Интерфейс должен иметь общий тип ('interface ReplyMessage ') – Victor2748

+1

@LouisWasserman, справа. Я просто хотел быть немного более подробным для образовательных целей. – aioobe

1

лямбда-выражения возможны только с Functional Interfaces (Интерфейсы только с одним способом, например Runnable или ActionEvent)

Если ReplyMessage является функциональным интерфейсом, вы можете сделать: формируется

paramsValues[idx++] = reply -> message.reply(reply); 

лямбда-выражения в этой схеме: параметры, метод должен принять, а затем -> затем тело метода

Вот код, как ReplyMessage интерфейс должен выглядеть следующим образом:

@FunctionalInterface 
interface ReplyMessage<T> { 
    void reply(T jo); 
} 

Для получения дополнительной информации рассмотрите возможность чтения this.

+0

Использование '@ FunctionalInterface' является необязательным. Кроме того, ограничение не является «только одним методом», а одним абстрактным методом. Это довольно большая разница. Интересно, что вы подразумеваете под «принимать параметры». Функция имеет параметры и принимает аргументы, если вы имели в виду это. – zeroflagL

0
paramValues[idx++] = reply -> message.reply(reply); 

Или

paramValues[idx++] = reply -> { 
    return message.reply(reply); 
} 

Он будет работать до тех пор, как ReplyMessage<JsonObject> функциональный интерфейс и paramValues ​​имеет тип ReplyMessage<JsonObject>.

Смежные вопросы