从Integer包装器类转换为int基本类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Integer包装器类转换为int基本类相关的知识,希望对你有一定的参考价值。

我一直在尝试将Integer Wrapper类转换为int基本类。我尚未找到适当的方法来编译代码。我正在使用Intellij IDEA,Java 11 Amazon Coretto,但需要在运行Java 8的计算机上运行它。

下面是原始代码:

static class Line<Integer> extends ArrayList<Integer> implements Comparable<Line<Integer>> {

        @Override
        public int compareTo(Line<Integer> other) {
            int len = Math.min(this.size(), other.size());
            for (int i = 0; i < len; i++) {;
                if ((int) this.get(i) != (int) other.get(i)) {
                    if ((int this.get(i) < (int) this.get(i)) {
                        return -1;
                    } else if ((int) this.get(i) > (int)this.get(i)) {
                        return 1;
                    } else {}
                }
            }
    ...

请注意,该行已插入到ArrayList。

最初,我对所有Integer对象使用了强制强制转换,因此它就像(int) this.get(i)。它可以在我的本地终端上工作,而我的Intellij并没有为此而烦恼,但不幸的是,另一台计算机却没有。它不能在那里编译

我以为是因为强制转换,因为另一台计算机返回了

Main.java:159: error: incompatible types: Integer cannot be converted to int
if ((int) this.get(i) != (int) other.get(i)) {
^
where Integer is a type-variable:
Integer extends Object declared in class Line

所以我删除了所有它们,以为我可以让机器自行将Integer包装器拆箱。它仍然没有编译。

如果代码像上面写的一样保留(不强制转换),它将返回“运算符'

然后,我尝试将它们分配给一个int变量。 Intellij IDEA向我尖叫说它需要int,但是却找到了Integer。所以我像这样强制铸造

int thisLine = (int) this.get(i);
int otherLine = (int) other.get(i);
if (thisLine != otherLine) {
    if (thisLine < otherLine) {
        return -1;
    } else if (thisLine > otherLine) {
        return 1;
    } else {}

不,没有用。删除演员表也不起作用。

这次我查找了有关Integer类的Javadocs(https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#intValue--),发现了一个很有前途的名为intValue()的小方法。问题是? Intellij无法解决该方法(奇怪的是,VSCode不会将此视为错误)。我像这样使用它

int thisLine = this.get(i).intValue();
int otherLine = other.get(i).intValue();
if (this.get(i) != other.get(i)) {
    if (thisLine < otherLine) {
        return -1;
    } else if (thisLine > otherLine) {
        return 1;

当然,那台顽固的计算机上还有另一个编译错误。

我用尽了所有选项。我正在认真考虑创建一个新的自定义类,以便可以将int值存储在ArrayList中,而不必处理所有这些Java向后不兼容的废话。这里的人都知道在Java中将Integer包装器对象转换为int基本对象的一致方法吗?

答案

这是在错误消息中对其进行说明的线索:

其中整数是类型变量:

整数扩展在类Line中声明的对象

[Integer不是 java.lang.Integer,但类型变量的名称令人困惑...

您在此处声明了类型变量:

static class Line<Integer> extends ArrayList<Integer> implements Comparable<Line<Integer>>

不声明类型参数即可解决:

static class Line extends ArrayList<Integer> implements Comparable<Line<Integer>>

以上是关于从Integer包装器类转换为int基本类的主要内容,如果未能解决你的问题,请参考以下文章

java核心技术总结篇一

int 和 Integer区别

integer类的parseint方法(基本数据类型包装类 )

int和Integer有什么区别?

int 和 Integer 有什么区别?

int 和 Integer 有什么区别?