gpt4 book ai didi

带有 'semantics' 的 Java 泛型,这可能吗?

转载 作者:IT老高 更新时间:2023-10-28 21:01:35 25 4
gpt4 key购买 nike

如果我使用了错误的术语,请先道歉,选择“语义”这个词。

出于所有显而易见的原因,我非常喜欢 Java 中的泛型。当我处理大量奇怪的代码时,它对我帮助很大,而且我经常不得不回到旧的东西。今天我发现自己遇到了一个经典的参数错位错误,我可能不会在通用时代之前编写它 - 它们让我有点懒惰。

我想知道是否有一种语言特性,无论是在 Java 中还是在其他语言中作为类似概念,它采用泛型的类型安全并将其扩展到一种语义安全。具体来说,我想帮助捕获由于将正确的东西放在错误的地方而导致的错误。

一个简单的例子:

Map<String, String> myMap = new HashMap<String, String>();
String myKey = "key";
String myVal = "value";
myMap.put(myVal, myKey);

没有编译器可以捕获。我想我可以 subclass String 制作包装器来给我一个 Key 类型和一个 Value 类型。我可以命名我的变量以表明它们的用途(就像我在这个例子中所做的那样)。还有什么?

所以我的问题是:

  • 出于学术兴趣,这个概念叫什么,什么语言有这个特性?
  • 在没有任何此类语言功能的情况下,避免此类错误的最佳做法是什么?

谢谢

最佳答案

我一直使用具有两种不同类型的键和值的映射,从不使用相同的类型。我想有时您希望对键和值使用与示例中相同的类型。我想不出任何具有此功能的语言。

实际上我之前使用过 Clojure,对于 map ,它使用关键字作为键,看起来像 :key,然后值就是值。它使它更清楚,但现在我正在涉足函数式编程,这并不是你真正要问的问题。查看类似 Lisp 的语言。

我认为这只是一个不让他们混淆的情况,Java当然不能强制执行这种检查。

最好的建议是对键和值使用不同的类型,以便编译器可以检测到类型错误,或者像您所做的那样明确命名键和值变量。

关于带有 'semantics' 的 Java 泛型,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6752153/

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