如果我通过选择"语义"这个词来使用错误的术语,那么首先道歉.
出于各种显而易见的原因,我非常喜欢Java中的泛型.当我处理各种各样奇怪的代码时,它对我有很大的帮助,而且我经常要回到旧的东西.今天我发现自己有一个经典的参数错位错误,我可能不会在前通用时代写的 - 它们让我有点懒.
我想知道是否有一种语言特性,无论是用Java还是用其他语言中的类似概念,它都具有泛型的类型安全性并将其扩展到一种语义安全性.具体来说,我想帮助捕获因将正确的东西放在错误的地方而导致的错误.
一个简单的例子:
Map<String, String> myMap = new HashMap<String, String>();
String myKey = "key";
String myVal = "value";
myMap.put(myVal, myKey);
Run Code Online (Sandbox Code Playgroud)
哪个没有编译器会捕获.我想,我可以子类化包装器给我一个StringKey类型和Value类型.我可以命名我的变量以表明它们的用途(就像我在这个例子中所做的那样).还有什么?
所以我的问题是:
谢谢
我总是使用具有两种不同类型的键和值的映射,从不使用相同的类型.我想有时候你想要使用与你的例子中相同的类型作为键和值.我无法想到任何具有此功能的语言.
实际上我之前使用过Clojure,对于地图,它使用一个关键字来表示:key,然后值就是值.它使它更清晰,但现在我正在涉及功能编程,这不是你问的问题.查看类似Lisp的语言.
我认为这只是一个没有让他们混淆的情况,Java当然不能强制执行这种检查.
最好的建议是为键和值使用不同的类型,以便编译器可以检测类型错误,或者像您一样明确地命名键和值变量.