Java:神秘的无效方法参考

时间:2018-10-03 19:11:33

标签: java method-reference

对于JDK 1.8.0_181和JDK 10.0.2,我都会收到此编译错误:

  

test \ Account.java:[13,88]错误:类型不兼容:方法引用无效

对于此变量声明:

public final MetaProperty<Integer> BALANCE_PROP_INVALID = new MetaProperty<Integer>(Account::getBalance);

但是这个既可以编译又可以正常运行:

public final MetaProperty<Integer> BALANCE_PROP_VALID = new MetaProperty<>(account -> ((Account) account).getBalance());

Here是要点。有谁知道为什么这是无效的,并希望解决方法?

仅供参考,我对反思不感兴趣。

1 个答案:

答案 0 :(得分:2)

我的猜测是您的构造函数期望使用Function<Object, T>或类似名称。它无法知道您打算开设一个帐户。一种解决方法是使类具有两个泛型。

class MetaProperty<A, R> {
    MetaProperty(Function<A, R> getter) { /* */ }
}

 public static final MetaProperty<Account, Integer> BALANCE_PROP_INVALID 
                                                    = new MetaProperty<>(Account::getBalance);