1
4
编辑 (基于问题澄清)
铸造到
很明显,你必须设置“获取”,你会失去(感知的)类型安全,但不会有未经检查的警告。 这个故事一定有更多的内容。以下代码:
做 不是 为我生成未选中的警告。我也无法想象为什么会这样。如果您事先知道“bar”总是返回一个小部件,请执行以下操作:
也能很好地工作。我是不是错过了什么? |
2
2
如果其他一切(多态实现、强制转换)都不适用,则可以实现 heterogeneous container (slide 32) . 这在第29项:considerType safe中描述。 异质容器 在里面 Effective Java 2 nd Edition . 容器的责任是确保类型安全。
您的示例的问题是,您使用的是
然后,您的客户机代码将为所需的每个类型标记扩展类型引用:
在运行时可以访问类型信息。然后,容器实现必须根据 actual type parameters of 类型标记(typereference的子类)。 这是一个完整的解决方案,但要实现很多工作。我所知道的任何集合库都不支持具有类型引用的容器。 |
3
1
如果你
但是,如果您持有任意类型的对象,那么这表明您有一个更深层次的设计问题。如果您知道对象将基于名称的类型(例如,“bar”总是为您提供一个小部件),那么考虑使用一个名为
如果你不知道从地图上得到什么样的“条”,你会遇到一个更深层次的设计问题,应该考虑使用一些面向对象的原则来减少耦合。 |
4
1
你说得对。逻辑步骤是创建一个
这不再给出编译器警告,但这并不意味着
编辑
:正如chssply76所指出的,这实际上不应该生成“unchecked cast”警告。我在Eclipse中测试过它,它确实没有给出特别的警告。你能张贴一篇文章吗?
SSCCE
(A类)
编辑2
:因此,您使用的映射可能包含诸如映射之类的一般结构。这就解释了这一点。好吧,除了重新设计结构外,我没有看到任何其他的选择,除了与
|
5
1
我认为根本的问题是对象类
如果要删除强制转换警告,则需要指定基类/接口。 例如,您可以这样做
而不是
地图的主要用途是把相似的东西放在一起。 如果你真的想写不同的东西,那就考虑写一个新的类。 |
6
0
不确定如何使用对象,但有:
|
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
milczi · Swift通用无强制展开向下投射 6 年前 |
bugs · Typescript-泛型类型扩展自身 6 年前 |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |