问题标签 [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.

0 投票
3 回答
2820 浏览

java - 带有递归哈希图的 Java 泛型类型安全警告

我正在使用哈希映射的递归树,特别是哈希映射映射,其中 Object 是对另一个哈希映射的引用,依此类推。这将通过递归算法传递:

我肯定知道Object是类型Hashmap<String, Object>,但很恼火我必须使用@SuppressWarnings("unchecked").

assert(/*entry.getValue() is of type HashMap<String, Object>*/)我会对执行 a或在未执行时抛出异常的解决方案感到满意。为了编译类型安全,我沿着泛型路线走下去,如果我抑制警告,那么它就达不到目的。

谢谢你的评论,ksb

0 投票
1 回答
1463 浏览

java - Lucene 关于否定的嵌套查询评估

我正在向Querydsl (它为 Java 提供类型安全的查询)添加Apache Lucene支持,但我在理解 Lucene 如何评估查询时遇到问题,尤其是在嵌套查询中的否定方面。

例如,我认为以下两个查询在语义上是相同的,但只有第一个返回结果。

第二个示例中的简化对象树如下所示。

Lucene 自己的QueryParser似乎评估"AND (NOT"成同一种对象树。

这是 Lucene 中的错误还是我误解了 Lucene 的查询评估?如有必要,我很乐意提供更多信息。

0 投票
7 回答
729 浏览

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 StringGroupId extends String,但我不能。有没有更好的方法来跟踪哪个是关键,也许让编译器强制执行它?

0 投票
6 回答
413 浏览

c++ - 将基类的指针转换为继承类

我正在开发一个小型 roguelike 游戏,对于任何不属于地图的对象/“事物”,它都基于 XEntity 类。有几个类依赖于它,例如 XPlayer、XItem 和 XMonster。

我的问题是,当我知道对象在项目中时,我想将指针从 XEntity 转换为 XItem。我用来拾取物品的示例代码是这样的,它是当不同的实体拾取它所站立的物品时。

我的第一个想法是在 XEntity 中创建一个将自身作为 XItem 指针返回的方法,但它会创建无法解析的循环依赖关系。

我对这个很困惑。任何帮助是极大的赞赏。

0 投票
6 回答
73716 浏览

java - 类型安全:来自 Object 的未经检查的强制转换

我尝试将一个对象强制转换为我的 Action 类,但它会导致警告:

感谢您的任何帮助

0 投票
8 回答
260709 浏览

type-safety - 强类型语言和静态类型语言有什么区别?

另外,一个是否意味着另一个?

0 投票
3 回答
1731 浏览

java - 将 Java 遗留代码转换为泛型 - 如何用类型替换 Object?

// 遗留代码

// 所以我想为“类型安全”使用泛型

// 那么问题来了

// 这就是我在干净的调用代码中要实现的目标:

}

那么,这样做的正确方法是什么?

0 投票
2 回答
8635 浏览

java - 具有泛型类型边界的 Java Builder 模式

我正在尝试使用 Builder 模式而不是伸缩构造函数来创建一个具有许多参数的类。我正在按照 Joshua Bloch 的 Effective Java 描述的方式执行此操作,在封闭类上有私有构造函数,以及一个公共静态 Builder 类。Builder 类确保对象在调用 build() 之前处于一致状态,此时它将封闭对象的构造委托给私有构造函数。因此

然后我想为一些变量添加类型边界,因此需要对类定义进行参数化。我希望 Foo 类的边界与 Builder 类的边界相同。

这编译得很好,但是编译器允许我做我认为应该是编译器错误的事情。例如

这里的 units 参数不是Unit<Acceleration>but Unit<Length>,但它仍然被编译器接受。

我在这里做错了什么?我想确保在编译时单元类型正确匹配。

0 投票
4 回答
693 浏览

java - 子类型中的“覆盖”实例变量:可能的风险?

假设我有一个 SuperClass 类和两个从 SuperClass 继承的子类 SubClassA 和 SubClassB。

这样很方便,因为我可以进入someList.size()Superclass在子类中拥有类型安全。问题是它“感觉”不对,你能想到这个方法有我不知道的潜在危险吗?

0 投票
4 回答
683 浏览

c# - 在不违反类型安全的情况下将不透明对象返回给调用者

我有一个应该返回当前状态快照的方法,以及另一个恢复该状态的方法。

状态Snapshot类对调用者应该是完全不透明的——没有可见的方法或属性——但它的属性必须在MachineModel类中是可见的。我显然可以通过向下转换来做到这一点,即CurrentSnapshot返回 an object,并RestoreSnapshot接受object它转换回 a 的参数Snapshot

但是像这样强制铸造让我觉得很脏。让我既是类型安全又不透明的最佳替代设计是什么?

更新解决方案

我最终将接受的答案和关于接口的建议结合起来。该类Snapshot是一个公共抽象类,内部有一个私有实现MachineModel

因为 is 的构造函数和方法Snapshotinternal来自程序集外部的调用者将其视为完全不透明的,不能从它继承。程序集中的调用者可以调用Snapshot.Restore而不是调用MachineModel.Restore,但这不是一个大问题。Snapshot.Restore此外,在实践中,如果不访问的私有成员,您永远无法实现MachineModel,这应该会阻止人们尝试这样做。