método de llamada en Java 8

auto propio:

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

y este método se llama así,

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

Y el constructor de la clase son,

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

}

Cuando se llama a este método createSubjectColumnForOutgoingno hay ningún parámetro pasó, y que está funcionando perfectamente. No soy capaz de entender desde donde los datos que entran en el objeto Message. Busqué en Google pero no es capaz de entenderlo. Por favor ayuda. Gracias por adelantado.

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));
}
Eran :

this::createSubjectColumnForOutgoinges un método de referencia, no una ejecución del createSubjectColumnForOutgoingmétodo.

El table.addGeneratedColumn()método, a la que se pasa la referencia al método, se puede llamar al método de la interfaz funcional implementada por esta referencia método. Si lo hace, se pasa una Messageinstancia a la misma.

No se ha incluido el código de addGeneratedColumn(), por lo que no sé qué tipo de interfaz funcional que espera (tal vez una Function).

EDITAR:

Después de su edición, Function<BEANTYPE, ?> generatedColumnes la interfaz funcional implementada por el método de referencia se pasa a addGeneratedColumn(). Esto significa que generatedColumn.apply(itemId)es la afirmación de que ejecuta el createSubjectColumnForOutgoing()método, y se puede ver que itemIdse pasa al método. Esto significa que itemIddebe ser un Messageejemplo.

Tenga en cuenta que addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)no ejecute el createSubjectColumnForOutgoing()método tampoco. Se pasa una interfaz funcional (implementado por una expresión lambda) que puede ejecutar ese método a un segundo addGeneratedColumnmétodo.

Supongo que te gusta

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