从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基本类的主要内容,如果未能解决你的问题,请参考以下文章