java 8中的调用方法

我有一个方法,


private String createSubjectColumnForOutgoing(Message message)

{

    //TODO : Changes for blocking messages of spam users



    if(message.getReceiverEnvelope() != null && message.getReceiverEnvelope().getUser() != null && message.getReceiverEnvelope().getUser().isBlocked())

    {

        return I18N.IN_REVIEW_BY_TEAM.msg();

    }



    return StringUtils.deSanitizeSpecialCharacters(message.getSubject());

}

这个方法是这样调用的,


case OUTGOING:

            table.addGeneratedColumn(I18N.MESSAGETABLE_HEADER_SUBJECT.msg(), this::createSubjectColumnForOutgoing);

            break;

类中的构造函数是,


public MessageTable(Directory directory, boolean withFilter, Device device)

{

    this(directory, new FilterConfiguration(withFilter), device);

}


public MessageTable(Directory directory, FilterConfiguration filterConfiguration, Device device)

{

    Objects.requireNonNull(directory);

    Objects.requireNonNull(device);


    this.directory = directory;


    dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(LocaleAware.super.getLocale());


    tableFooter = createTableFooter();


    openButton = createOpenButton();

    newButton = createNewButton();

    messageTable = createTable(device);


    tableFooter.addComponent(newButton, 0);

    tableFooter.addComponent(openButton, 1);


    final VerticalLayout layout = new VerticalLayout();

    layout.addComponent(createFilterComponent(filterConfiguration));

    layout.addComponents(tableFooter, messageTable);

    layout.setComponentAlignment(tableFooter, Alignment.MIDDLE_LEFT);


    rootLayout = layout;

    setCompositionRoot(rootLayout);


}

调用此方法createSubjectColumnForOutgoing时没有传递任何参数,并且工作正常。我无法理解消息对象中数据的来源。我用谷歌搜索但无法理解。请帮忙。提前致谢。


addGeneratedColumn 的代码


public void addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)

{

    String header = null;

    if(id instanceof String)

    {

        header = (String) id;

    }

    addGeneratedColumn(header, id, (source, itemId, columnId) -> generatedColumn.apply(itemId));

}


慕少森
浏览 192回答 1
1回答

慕容708150

this::createSubjectColumnForOutgoing是方法引用,而不是方法的执行createSubjectColumnForOutgoing。您传递方法引用的table.addGeneratedColumn()方法可能正在调用此方法引用实现的功能接口的方法。如果是这样,它会将一个Message实例传递给它。您没有包含 的代码addGeneratedColumn(),所以我不知道它期望什么类型的功能接口(可能是Function)。编辑:在您进行编辑之后,Function<BEANTYPE, ?> generatedColumn是您传递给的方法引用实现的功能接口addGeneratedColumn()。这意味着那generatedColumn.apply(itemId)是执行该createSubjectColumnForOutgoing()方法的语句,您可以看到它itemId被传递给该方法。这意味着itemId必须是一个Message实例。请注意,addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)也不执行该createSubjectColumnForOutgoing()方法。它将可以执行该方法的功能接口(由 lambda 表达式实现)传递给第二个addGeneratedColumn方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java