当前位置: 首页 > 面试题库 >

为什么“ T扩展字符串”被允许但给出警告?

魏鸿禧
2023-03-14
问题内容

为什么T extends String允许但发出警告?

类型参数T不应由最终类型String限制。最终类型无法进一步扩展

public class Car<T extends String>

我知道最后的决定我知道这是有效的,因为T can be String我可能只想知道警告的值。


问题答案:

如果实际的问题是“为什么允许”,那么想象一下final在现有类中添加关键字时的情况。我认为您不希望此更改破坏将此类用作通用范围的其他现有代码,因为它仍然完全合法。这就是为什么编译器在这种情况下不会发出错误的原因。

另一方面,如果您不小心将finalclass用作泛型绑定,则希望得到通知,因为这样的构造没有意义。这就是编译器发出警告的原因。

实际上,用警告标记合法但毫无意义的结构是一种常见的做法。



 类似资料:
  • 问题内容: 我想知道Java中是否有特殊原因总是使用“ ”而不是“ ”来定义类型参数的界限。 例: 被禁止但是 是正确的。是什么原因呢? 问题答案: 在类“实现”还是“扩展”之间,通用约束语言没有语义差异。约束可能性是“扩展”和“超级”-也就是说,该类是可分配给其他类的对象(扩展),还是该类可从该类分配(超级)。

  • 问题内容: 作为实验,我尝试扩展-array,如下所示: 在类本身中添加一些与排序,交换,子数组构建等有关的方法。但是我在编译时遇到了这个错误: 我很好奇:为什么Java不允许扩展数组? 问题答案: 扩展基本类型(例如a 或数组)会打开安全漏洞。如果Java允许您扩展数组,则采用数组的方法将变得不安全。这就是字符串为,而数组根本不能扩展的原因。 例如,您可以重写该方法,并返回不正确大小的数组。这有

  • 在爪哇,its说: 所以数组被称为协变的。但对于泛型,他们说: 因此它是不变的。但问题是,“泛型真的是不变的吗”? 那为什么说泛型是不变的呢?

  • 问题内容: 我在这里的研究中得到了不同的答案。 有人可以验证Redis服务器只能存储任何数值的表示吗? 例如,如果我在lpush中使用具有双重类型的Java客户端(Jedis),在发送给Redis之前是否需要将其转换为等效于字符串类型的内容? 还是有一种方法可以发送诸如double之类的实际数字类型?如果是这样,是否有任何示例代码说明了如何实现此目的? 谢谢 问题答案: Redis将所有内容存储在

  • ES6加强了对Unicode的支持,并且扩展了字符串对象。 字符的Unicode表示法 JavaScript允许采用\uxxxx形式表示一个字符,其中“xxxx”表示字符的码点。 "\u0061" // "a" 但是,这种表示法只限于\u0000——\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达。 "\uD842\uDFB7" // "

  • 问题内容: 我用来解析/验证用户输入。不幸的是,它在解析时允许字符作为后缀。 示例代码: 结果: 我实际上希望他们两个都有解析异常。我怎样才能告诉我不允许输入? 问题答案: 从以下文档中: 从给定字符串的开头解析文本以产生数字。 该方法可能不会使用给定字符串的整个文本。 这是一个示例,可以使您了解如何确保考虑整个字符串。 输出: