gpt4 book ai didi

Java 映射混合类型

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

我正在寻找一种方法来创建映射到混合类型的 HashMap。

例如,以下内容适用于 Python(注意 Python dict 类似于 Java HashMap ):

d = dict()
d["str"] = "This is a string"
d["flt"] = 1.23
d["int"] = 5

访问d[x]时,将返回适当的类型(在此示例中为字符串、 float 、整数)。

在 Java 中,我可以使用 HashMap<String, Object> ,但我真的没有办法立即判断每个对象是什么类型。

因此,我目前正在尝试创建一个 MixedType包含一个对象的类,还有它的原始类型信息,以便我以后可以向下转换它。例如:

public class MixedMap
public static class MixedType
{
public Class<?> cls;
public Object val;

public MixedType(Class<?> c, Object v)
{
this.cls = c;
this.val = v;
}
}

public static void main(String args[])
{
MixedType m1 = new MixedType(String.class, "This is a String");
System.out.println((m1.cls)m1.val);
}
}

请注意,这是我正在尝试做的事情:-)因为它目前没有编译提示 m1 cannot be resolved to a type .

所以我的问题是,我该如何解决这个问题?欢迎使用其他方法来实现相同的目标,但请不要告诉我这会限制编译器的类型检查能力——我知道这一点并且可以接受。

提前致谢。

最佳答案

正确的做法是m1.cls.cast(m1.val) ,但与普通的 Map<String, Object> 相比,你几乎肯定不会获得任何东西。 .一种更简单的方法可以让您获得完全相同的类型安全性和完全相同的信息——也就是说,不多——只是使用 getClass() Object 上的方法 map 中的值。

这些都无法实现您能够说 String value = map.get("str") 的目标- 没有什么比直接 Actor 更能做到这一点。你可以做

Object value = map.get("str");
if (value instanceof String) {
// do stringy things
}

或类似的东西。

如果您在编译时知道值在使用点的类型,那么到目前为止最好的解决方案就是继续在使用点进行强制转换。一般来说,进行此类配置的“理想”方式是不使用 Map。 , 但要构建定制的 Configuration在编译时知道其字段及其类型的类,但如果您想使用 Map ,那么直接进行转换可能是您最好的选择。

关于Java 映射混合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081463/

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