java - 包含多态方法引用的数据结构

标签 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;
}

最佳答案

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

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

关于java - 包含多态方法引用的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39479645/

相关文章:

c++ - 基枚举类继承

c++ - 如何在开关中将一个枚举值标记为不适当的大小写

java - Java 世界中有可变键长的 Map 吗?

java - 接口(interface)实现困惑?

sql - 如何对 MySQL 数据库中的 ENUM 列进行排序?

java - 如何在类中保存 Class<T> 引用?

java - Java泛型中删除的概念是什么?

java - 已重置的 JTable 的 ActionListener

java - 如何用 Java 编写 GMM(高斯混合模型)?

swift - 将运算符重载为通用函数