bob*_*bel 1 java integer initialization class naming-conventions
这是一个自我回答的问题!
我正在尝试Integer使用值初始化变量,但它没有按预期工作.它给了我不同的错误.
到目前为止我尝试过的:
public class Integer {
public static void main(String[] args) {
Integer num1 = 42; // Type mismatch: cannot convert from int to Integer
Integer num2 = (Integer)42; // Cannot cast from int to Integer
Integer num3 = new Integer(42); // The constructor Integer(int) is undefined
}
}
Run Code Online (Sandbox Code Playgroud)
这是什么问题?如何Integer正确设置我的价值?
尽量不要使用内置类的相同名称!
由于您使用的是同一个类的名称,因此您将使用自己的类java.lang.Integer隐藏内置类.所以,如果你访问一个Integer在你的榜样,你访问你自己的类,是不是内置java.lang.Integer类的JDK.
出现第一个和第二个错误,因为您的类与真实不兼容java.lang.Integer.
发生第三个错误,因为您的 Integer类中没有接受intas参数的构造函数.
因此,摆脱错误的最简单方法就是将您的类命名为不同.例如,将其命名为IntegerTest符合您意图的东西.
考虑以下Integer在不同情况下使用名称的非常糟糕的做法示例:
package Integer;
class Integer {
public static void main(String[] lnteger) {
System.out.println(Integer(new Integer(42)).Integer);
}
java.lang.Integer Integer;
Integer(java.lang.Integer Integer) {
this.Integer = Integer;
}
static Integer Integer(Integer lnteger) {
Integer Integer; Integer:
for (Integer = lnteger; Integer.Integer < Integer.new lnteger(lnteger).Integer.Integer; Integer.Integer++) {
Integer(new Integer(--lnteger.Integer));
continue Integer;
}
return lnteger;
}
class lnteger {
Integer Integer;
lnteger(Integer Integer) {
this.Integer = Integer;
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这编译.
你真的无法区分不同的类型Integer.如果没有IDE,你就会迷失方向.有了IDE,你也可能会丢失.
即使来自SO的格式化程序也不能以良好的方式显示它,因为Integer它是包名,类名,成员名,参数名,方法名和标签名.
所以给所有东西一个有意义的(并且最好是唯一的)名称,以避免这种混乱.