包含多态方法参考的数据结构

时间:2016-09-13 22:01:01

标签: java generics enums method-reference

该行

associations.put("test1",B::setBeta);
下面的

无法编译。我不清楚为什么它不起作用,因为B扩展A.是否有办法使这项工作?我正在尝试从继承族中构建方法引用的映射。

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public enum Test {
    ENUM0() {
        @Override
        public void init() {
            associations.put("test0",A::setAlpha);
        }
    },
    ENUM1() {
        @Override
        public void init() {
            associations.put("test1",B::setBeta);
        }
    };
    public abstract void init();

    Map<String, BiConsumer<? extends A, String>> associations = new HashMap<>();
}

class A {
    public String getAlpha() {
        return alpha;
    }
    public void setAlpha(String alpha) {
        this.alpha = alpha;
    }

    String alpha;
}

class B extends A {
    public String getBeta() {
        return beta;
    }
    public void setBeta(String beta) {
        this.beta = beta;
    }

    String beta;
}

1 个答案:

答案 0 :(得分:1)

这似乎是类型推断的奇怪案例,显式标记表达式可以解决编译错误:

associations.put("test1", (BiConsumer<B, String>) B::setBeta);