gpt4 book ai didi

Java 8 通用函数映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:33 24 4
gpt4 key购买 nike

不确定这是否可能;我承认我并不像我希望的那样擅长泛型。

基本上,我想创建一个类 -> 函数的映射其中用于键的类是函数输入的类,像这样(不合法的语法):

public static Map<Class<T>,Function<T,Expression>> STUFF = new HashMap<>();

{
STUFF.put(List.class, ListExpression::new);
STUFF.put(String.class, StringExpression::new);// this constructor must take string
}

所以如果我这样做:

Function<String,Expression> e = STUFF.get(o.getClass());
Expression ex = e.apply(o);

它得到适合我的类型。

最佳答案

这是不可能的。每次都想Map<Class<T>, SomeType<T>> ,即将类与参数化类型相关联,而参数化类型以某种方式与键中的类相关,这是无法完成的。这是因为 key 类型 Class<T>必须根据 Map<K, V> 在所有条目之间共享定义。

剩下的是拥有 Map<Class<?>, SomeType<?>> 的实用替代方案,将此 map 封装在私有(private)字段中,并在将项目放入 map 时检查约束。有点像

public class StuffManager {

private final Map<Class<?>, Consumer<?>> stuff = new HashMap<>();

public <T> void register(Class<T> key, Consumer<? super T> val) {
stuff.put(key, val);
}
}

关于Java 8 通用函数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30087442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com