método de chamada em java 8

auto próprio:

Eu tenho um método,

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());
}

e este método é chamado assim,

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

E o construtor da classe são,

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);

}

Ao chamar este método createSubjectColumnForOutgoingnão há parâmetro passado, e está funcionando perfeitamente. Eu não sou capaz de entender de onde os dados estão chegando objeto de mensagem. Eu pesquisei, mas não é capaz de entendê-la. Por favor ajude. Desde já, obrigado.

Código de 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));
}
Eles foram:

this::createSubjectColumnForOutgoingé um método de referência, não uma execução do createSubjectColumnForOutgoingmétodo.

O table.addGeneratedColumn()método, no qual você passar a referência método, pode ser chamado o método da interface funcional implementado por esta referência método. Se isso acontecer, ele passa um Messageexemplo para ele.

Você não incluiu o código de addGeneratedColumn(), então eu não sei que tipo de interface funcional que espera (talvez um Function).

EDITAR:

Após a sua edição, Function<BEANTYPE, ?> generatedColumné a interface funcional implementado pela referência de método você passa para addGeneratedColumn(). Isto significa que generatedColumn.apply(itemId)é a afirmação de que executa o createSubjectColumnForOutgoing()método, e você pode ver que itemIdé passado para o método. Isto significa que itemIddeve ser um Messageexemplo.

Note-se que addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)não executa o createSubjectColumnForOutgoing()método de qualquer um. Ele passa uma interface funcional (implementado por uma expressão lambda) que pode executar esse método a um segundo addGeneratedColumnmétodo.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=212291&siteId=1
Recomendado
Clasificación