无法初始化Integer变量

时间:2014-02-25 10:05:22

标签: java class integer initialization 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
    }
}

这里有什么问题?如何正确设置Integer的值?

2 个答案:

答案 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;               
}

}