为了账号安全,请及时绑定邮箱和手机立即绑定

java 8中的调用方法

java 8中的调用方法

慕少森 2022-01-19 09:39:08
我有一个方法,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方法。


查看完整回答
反对 回复 2022-01-19
  • 1 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信