这是一个自行回答的问题!
我正在尝试使用值初始化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
}
}
这里有什么问题?如何正确设置Integer
的值?
答案 0 :(得分:6)
尽量不要使用内置类的相同名称!
由于您使用的是类java.lang.Integer
的相同名称,因此您将使用自己的类隐藏内置类。因此,如果您在示例中访问Integer
,则表示您正在访问您的自己的类,该类不是JDK的内置java.lang.Integer
类。
发生第一个和第二个错误,因为您的课程与真实的java.lang.Integer
不兼容
发生第三个错误,因为您在 Integer
类中没有接受int
作为参数的构造函数。
因此,摆脱错误的最简单方法就是将您的类命名为不同。例如,将其命名为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;
}
}
}
很遗憾,这会编译。
你真的无法区分不同种类的Integer
。如果没有IDE,你就会迷失方向。使用IDE,你可能也会丢失。
即使 SO 中的格式化程序也无法以良好的方式显示,因为Integer
是包名,类名,成员名,参数名,方法名和标签名。
为所有内容提供有意义的(以及最好的唯一)名称,以避免此类混淆。
答案 1 :(得分:2)
将您的课程重命名为例如IntegerTest和所有将工作
public class IntegerTest {
public static void main(String[] args) {
Integer num1 = 42;
}
}