问题标签 [type-safety]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 带有递归哈希图的 Java 泛型类型安全警告
我正在使用哈希映射的递归树,特别是哈希映射映射,其中 Object 是对另一个哈希映射的引用,依此类推。这将通过递归算法传递:
我肯定知道Object
是类型Hashmap<String, Object>
,但很恼火我必须使用@SuppressWarnings("unchecked")
.
assert(/*entry.getValue() is of type HashMap<String, Object>*/)
我会对执行 a或在未执行时抛出异常的解决方案感到满意。为了编译类型安全,我沿着泛型路线走下去,如果我抑制警告,那么它就达不到目的。
谢谢你的评论,ksb
java - Lucene 关于否定的嵌套查询评估
我正在向Querydsl (它为 Java 提供类型安全的查询)添加Apache Lucene支持,但我在理解 Lucene 如何评估查询时遇到问题,尤其是在嵌套查询中的否定方面。
例如,我认为以下两个查询在语义上是相同的,但只有第一个返回结果。
第二个示例中的简化对象树如下所示。
Lucene 自己的QueryParser
似乎评估"AND (NOT"
成同一种对象树。
这是 Lucene 中的错误还是我误解了 Lucene 的查询评估?如有必要,我很乐意提供更多信息。
java - Java 集合中更好的类型安全性
在我的 java 编码中,我经常以几个Map<String,Map<String,foo>>
or结尾Map<String,List<String>>
,然后我很难记住哪个 String 是哪个键。//Map<capabiltyId,Map<groupId,foo>>
我用or评论声明//Map<groupId,List<capabilityId>
,但这不是最好的解决方案。如果 String 不是最终的,我会创建新的类CapabilityId extends String
和GroupId extends String
,但我不能。有没有更好的方法来跟踪哪个是关键,也许让编译器强制执行它?
c++ - 将基类的指针转换为继承类
我正在开发一个小型 roguelike 游戏,对于任何不属于地图的对象/“事物”,它都基于 XEntity 类。有几个类依赖于它,例如 XPlayer、XItem 和 XMonster。
我的问题是,当我知道对象在项目中时,我想将指针从 XEntity 转换为 XItem。我用来拾取物品的示例代码是这样的,它是当不同的实体拾取它所站立的物品时。
我的第一个想法是在 XEntity 中创建一个将自身作为 XItem 指针返回的方法,但它会创建无法解析的循环依赖关系。
我对这个很困惑。任何帮助是极大的赞赏。
java - 类型安全:来自 Object 的未经检查的强制转换
我尝试将一个对象强制转换为我的 Action 类,但它会导致警告:
感谢您的任何帮助
type-safety - 强类型语言和静态类型语言有什么区别?
另外,一个是否意味着另一个?
java - 将 Java 遗留代码转换为泛型 - 如何用类型替换 Object?
// 遗留代码
// 所以我想为“类型安全”使用泛型
// 那么问题来了
// 这就是我在干净的调用代码中要实现的目标:
}
那么,这样做的正确方法是什么?
java - 具有泛型类型边界的 Java Builder 模式
我正在尝试使用 Builder 模式而不是伸缩构造函数来创建一个具有许多参数的类。我正在按照 Joshua Bloch 的 Effective Java 描述的方式执行此操作,在封闭类上有私有构造函数,以及一个公共静态 Builder 类。Builder 类确保对象在调用 build() 之前处于一致状态,此时它将封闭对象的构造委托给私有构造函数。因此
然后我想为一些变量添加类型边界,因此需要对类定义进行参数化。我希望 Foo 类的边界与 Builder 类的边界相同。
这编译得很好,但是编译器允许我做我认为应该是编译器错误的事情。例如
这里的 units 参数不是Unit<Acceleration>
but Unit<Length>
,但它仍然被编译器接受。
我在这里做错了什么?我想确保在编译时单元类型正确匹配。
java - 子类型中的“覆盖”实例变量:可能的风险?
假设我有一个 SuperClass 类和两个从 SuperClass 继承的子类 SubClassA 和 SubClassB。
这样很方便,因为我可以进入someList.size()
并Superclass
在子类中拥有类型安全。问题是它“感觉”不对,你能想到这个方法有我不知道的潜在危险吗?
c# - 在不违反类型安全的情况下将不透明对象返回给调用者
我有一个应该返回当前状态快照的方法,以及另一个恢复该状态的方法。
状态Snapshot
类对调用者应该是完全不透明的——没有可见的方法或属性——但它的属性必须在MachineModel
类中是可见的。我显然可以通过向下转换来做到这一点,即CurrentSnapshot
返回 an object
,并RestoreSnapshot
接受object
它转换回 a 的参数Snapshot
。
但是像这样强制铸造让我觉得很脏。让我既是类型安全又不透明的最佳替代设计是什么?
更新解决方案:
我最终将接受的答案和关于接口的建议结合起来。该类Snapshot
是一个公共抽象类,内部有一个私有实现MachineModel
:
因为 is 的构造函数和方法Snapshot
,internal
来自程序集外部的调用者将其视为完全不透明的,不能从它继承。程序集中的调用者可以调用Snapshot.Restore
而不是调用MachineModel.Restore
,但这不是一个大问题。Snapshot.Restore
此外,在实践中,如果不访问的私有成员,您永远无法实现MachineModel
,这应该会阻止人们尝试这样做。