java是否应该允许类名定义与泛型类型参数相同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java是否应该允许类名定义与泛型类型参数相同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1788字,纯文字阅读大概需要3分钟。
内容图文
![java是否应该允许类名定义与泛型类型参数相同?](/upload/InfoBanner/zyjiaocheng/803/704d27a591da42d1b1632a2f0dfa717b.jpg)
我在同一个包测试中创建了类似下面的类.它只是为了测试java是否真的允许它.确实如此,但问题就出现了.
package test;
public class E {
}
package test;
public class T {
}
package test;
import test.E;
import test.T;
public class K<E, T> {
E e;
T t;
public K(E e, T t) {
this.e = e;
this.t = t;
}
public static void main(String[] args) {
K k = new K<E, T>(new E(), new T());
}
}
上面的代码给出了多个编译问题
Multiple markers at this line
- Cannot make a static reference to the non-static type E
- Cannot make a static reference to the non-static type T
- Cannot make a static reference to the non-static type T
- Cannot make a static reference to the non-static type E
- K is a raw type. References to generic type K<E,T> should be
parameterized
它清楚地表明编译器在E和E类之间混淆了相同的T.
因此,解决方法是使用包定义它的真实类型.
K k = new K<test.E, test.T>(new test.E(), new test.T());
现在,如果所有这些类都在默认包中,则无法解决此编译问题.
那么问题是java应该允许在默认包中声明这样的类吗?
解决方法:
It clearly shows compiler is confused between E and class E same for T.
我觉得你错了.我认为如果你仔细阅读JLS的相关部分(我稍后会查看),你会发现它们清楚地说明了E和T应该在各种情况下解决的问题.如果编译器得到错误的分辨率,我会非常惊讶;即没有实施JLS.
实际上,编写代码的人心中存在困惑……
这里的问题是关于什么优先于你(和典型的程序员)所期望的东西的规则.但他们就像是有充分理由的.
通常这没关系,但是如果忽略了普通的Java命名约定并为类使用单字母名称,那么你可能会被烧毁.
So Question is should java allow declaration of such classes in default package?
或者,“你”是否应该忽略Java类命名约定?
坦率地说,如果程序员忽略了样式指南/建议,那么程序员可以通过很多方式来伤害自己.但是如果你试图过多地保护程序员,你实际上是因为无法实现你需要推动信封的东西而伤害他/她.最好的政策是(IMO)不要将程序员视为儿童.如果他们真的想要用锋利的刀子来玩……那就让他们吧.
内容总结
以上是互联网集市为您收集整理的java是否应该允许类名定义与泛型类型参数相同?全部内容,希望文章能够帮你解决java是否应该允许类名定义与泛型类型参数相同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。