2016-01-12 3 views
0

У меня есть класс с конструктором, как определено ниже:Скала - Pass в функции пустот в качестве параметра

class Worker(val action: String, val owner: Component, 
     validate: (RequestScopeObject) => Boolean, 
     model: (RequestScopeObject) => Unit, 
     connector: (RequestScopeObject) => Unit) 

, а другой Java класс называется FrameFactory с методом, как показано ниже:

public static <T extends Component> T 
    createContainerAndShow(String framesetid, Component component) 

Когда я создаю экземпляр класса Worker, как показано ниже:

new Worker(
    action = "actionName", 
    owner = null, 
    validate = (scopeObject) => {true}, 
    model = (scopeObject) => {}, 
    connector = (scopeObject: RequestScopeObject) => { 
     FrameFactory.createContainerAndShow("string", new JPanel()) 
    () // forced to put a '()' here as FrameFactory.createContainerAndShow 
     //returns the Jpanel created 
    } 
)) 

Мне было интересно, существует ли какой-либо способ w это лучше? Как объявить параметр коннектора как функцию, которая возвращает Unit и игнорировать JPanel, возвращаемую FrameFactory

ответ

1

Вы можете просто проигнорировать тот факт, что ваш коннектор выглядит так, будто он возвращает фрейм, компилятор знает, что это функция RequestScopeObject => Unit, и это будут рассматриваться как таковые. Вы можете думать об этом, как компилятор добавит () в качестве последнего утверждения в вашу функцию.

Также обратите внимание, что вам не нужны фигурные скобки, если у вас есть только одна инструкция, и вам не нужны парсеры вокруг одного аргумента.

new Worker(
    action = "actionName", 
    owner = null, 
    validate = scopeObject => true, 
    model = scopeObject =>(), 
    connector = scopeObject => 
    FrameFactory.createContainerAndShow("string", new JPanel()) 
)) 
1

Вы не обязаны ставить () в конце функционального блока. Если возвращаемый тип функции имеет тип Unit, то экземпляр, являющийся результатом последнего выражения блока, не возвращается.

Рассмотрим следующий пример:

def f(g: Int => Unit) = {} 
f((x: Int) => 3) 
Смежные вопросы