gpt4 book ai didi

Java 泛型 : Generic type defined as return type only

转载 作者:IT老高 更新时间:2023-10-28 13:51:57 25 4
gpt4 key购买 nike

我正在查看 GWT 的一些 GXT 代码,并且遇到了泛型的这种用法,我在 Java 教程中找不到另一个示例。类(class)名称是 com.extjs.gxt.ui.client.data.BaseModelData 如果您想查看所有代码。以下是重要部分:

private RpcMap map;

public <X> X get(String property) {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X)NestedModelUtil.getNestedValue(this, property);
}
return map == null ? null : (X) map.get(property);
}

X在类中的任何其他地方或层次结构中的任何地方都没有定义,当我在 Eclipse 中点击“转到声明”时,它只是转到 <X>在公共(public)方法签名中。

我尝试通过以下两个示例调用此方法,看看会发生什么:

public Date getExpiredate() {
return get("expiredate");
}

public String getSubject() {
return get("subject");
}

它们编译并且不显示错误或警告。我认为至少我必须进行类型转换才能使其正常工作。

这是否意味着泛型允许一个神奇的返回值,它可以是任何东西,并且会在运行时爆炸?这似乎与泛型应该做的背道而驰。任何人都可以向我解释这一点,并可能给我一个链接到一些解释这个更好一点的文档吗?我浏览了 Sun 关于泛型的 23 页 pdf,每个返回值示例都是在类级别定义的,或者在传入的参数之一中。

最佳答案

该方法返回您期望的任何类型(<X> 在该方法中定义并且绝对无界)。

这是非常非常危险的,因为没有规定返回类型实际上与返回值匹配。

这样做的唯一好处是您不必强制转换此类可以返回任何类型的通用查找方法的返回值。

我会说:小心使用这样的结构,因为您几乎失去了所有类型安全性,并且获得的只是您不必在每次调用 get() 时编写显式转换。 .

是的:这几乎是一种黑魔法,它在运行时会爆炸并打破泛型应该实现的整个想法。

关于Java 泛型 : Generic type defined as return type only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/338887/

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