亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號