无法初始化Integer变量

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正确设置我的价值?

bob*_*bel 6

尽量不要使用内置类的相同名称!

由于您使用的是同一个类的名称,因此您将使用自己的类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它是包名,类名,成员名,参数名,方法名和标签名.

所以给所有东西一个有意义的(并且最好是唯一的)名称,以避免这种混乱.