问题标签 [raw-types]
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 - 可迭代泛型和原始类型
在不使用泛型类型的情况下,我有以下工作正常:
这让我可以这样循环:
我更新了我的代码,所以我可以通过它的泛型类型来存储对象。现在是这样的:
问题是当我创建一个新的 OC_GuillotinePacker 时,例如:
然后我不能再像这样循环了:
它给了我一个不兼容的类型警告。需要的是 OC_GuillotinePacker<>,找到的是 java.lang.Object。
是否有可能做到两者皆有可能?所以每个循环都有一个原始的,一个具有通用类型的。
java - 当类型未知时,如何避免使用原始类型并使用泛型?
我有一个处理程序的通用接口:
你可以实现这个接口和过程T message
。您必须将实现的实例传递给EventDispatcher
实例。该类在内部存储EventHandler
各种类型的多个实例。
在某个时刻,一个事件被触发,EventDispatcher
实例调用相应EventHandler
的 'shandleEvent()
方法并传递一个与 .s 相同类型的消息EventHandler
。问题是我不知道哪个是确切的类型,但我确信T message
我传递给EventHandler
实例具有相同的“T”。
我进行此调用的方式使用原始类型并且有效:
,但我收到警告“未经检查地调用 'handleEvent(T)' 作为原始类型 'EventHandler' 的成员”。
是否可以使用泛型来避免警告?
我想到的一种可能的解决方案是制作一个通用的包装方法:
并使用它:
但我不喜欢我必须制作一个包装方法的事实。有没有更优雅的解决方案?
java - 尝试打印原始类型集的内容时 Java 的 TreeSet 行为
当我尝试运行以下代码时,出现运行时错误:java.lang.Integer cannot be cast to java.lang.String
我尝试用 HashSet、HashLinkedSet、ArrayList 等替换它,它们都运行并打印了答案。看起来只有 TreeSet 无法工作!
我的假设是发生这种情况是因为 TreeSet 在运行时对对象进行了比较,这会失败。
但是,我也知道其他类型的集合(例如 HashSet)需要进行相同的比较(但可能在 HashSet 中,比较发生在两个散列值之间?并且没有失败的转换?)
为什么会这样?
swift - 在 case 中使用 rawValue 和 agument 枚举
我刚刚定义了我的枚举并为每种情况分配了一些参数但是我想知道为什么我不能再使用 rawValue 功能
java - 如何防止将另一个泛型类型的节点或原始节点添加到 BST?
我正在实现一个通用的 BST,它不允许重复。我创建了一个Node
类,它具有以下定义:
有了它,我基本上希望与某个节点关联的值与相同类型的其他值具有可比性。然后我在里面也有以下compareTo
方法:
现在,在我的 BST 的实施中,我在接受参数方面遇到了问题。BST 有以下定义:
如您所见,我要求根的泛型类型与相同泛型类型的其他值可比较,即T extends Comparable<T>
. 这似乎一切正常,直到实现我的add
方法,该方法具有以下签名:
似乎没有什么可疑的(至少对我而言),但如果我有以下代码:
它实际上可以编译,但它不应该,因为我正在实例化BinaryTreeSet
s String
,所以我不应该能够将数字添加到树中。
我做错了什么,为什么?在这些情况下,我怎样才能让它不编译?
java - 在原始类类型上忽略显式方法类型参数;编译器错误?
我在调用具有显式类型参数的泛型方法时遇到编译器错误,就好像没有考虑显式类型参数一样。最小的例子:
ThingProducer
是原始类型,因为该类具有类型参数,但在调用时getThing
我们不是引用类类型参数,而是提供方法类型参数。根据我对 JLS 的理解,这应该是合法的,但它给了我这个错误:
如果我错误消失
<S>
从_ThingProducer
- 或使
getThing
静态 - 声明
thingProducer ThingProducer<?>
而不是原始类型ThingProducer
这是编译器错误吗?如果不是,JLS 中的什么规则定义了这种行为?
java - Java泛型中的原始与超类型类
给定一个接口,例如,
使用 var 之类的运行时是否有任何实际差异
NumVal myRawVal = (...)
对比
NumVal<Number> mySuperVal = (...)
?
我知道在编译时前者会导致更多警告。但是根据Oracle,类型擦除之后也应该是Number,所以无论如何它是安全的,不是吗?
java - Java 泛型 - 我可以在这个用例中摆脱原始类型吗
我正在使用以下 jaxb 类层次结构:
我偶然发现了其他类中具有以下签名的方法(请注意原始类型):
此方法从类的不同部分调用,有时使用 List<FieldAddType>
as 参数,有时使用List<FieldModifyType>
.
现在我正试图摆脱其签名中的原始类型。
遵循get-put 原则,我决定将签名更改为
...因为 createFields 实现只是将东西放在这些集合中。问题是,由于 RecordModifyType#getFields() 返回List<FieldModifyType>
和 RecordAddType#getFields() 返回List<FieldAddType>
,我现在不能调用该方法,因为它只允许 FieldBaseType 的超类型,而不是子类型:
使用原始类型按预期工作 - 没有编译错误和编组工作。
所以我的问题是 - 有没有办法保留行为但摆脱原始类型?
java - Map 的参数化类型键
我正在学习 Java,目前正在阅读 Joshua Bloch 的 Effective Java。
在第 29 条中,他讨论了 Map 的参数化类型键以创建类型安全的异构映射。这是代码:
他接着说
恶意客户端可以很容易地破坏收藏夹实例的类型安全,只需使用原始形式的 Class 对象。但是生成的客户端代码在编译时会生成未经检查的警告。
我知道那Class<T>
会被删除到班级。但我不确定恶意客户端如何在编译时破坏类型安全。我尝试了各种方法,但正如我所料,我总是遇到编译器错误。
有人可以告诉我上面引用的那句话中约书亚布洛赫到底是什么意思吗?