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 createSubjectColumnForOutgoing
nã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));
}
this::createSubjectColumnForOutgoing
é um método de referência, não uma execução do createSubjectColumnForOutgoing
mé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 Message
exemplo 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 itemId
deve ser um Message
exemplo.
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 addGeneratedColumn
método.