我有一个方法,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));}
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
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
方法。
添加回答
举报
0/150
提交
取消