Я пытался преобразовать класс 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
, поэтому я удалил их все и подумал, что могу позволить машине распаковатьЦелочисленная обертка сама по себе. Он по-прежнему не компилируется.
Если оставить код, подобный тому, что написан выше (без принудительного приведения), он вернет «Оператор» <, не применимый для «Целое число», «Целое число». Поэтому я использовалметод .compareTo (). Ошибка компиляции. </p>
Затем я попытался присвоить их переменной 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 {}
Нет, не сработало. Удаление приведения также не сработало.
Я посмотрел Javadocs (https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#intValue--) на этот раз о классе Integer и обнаружил многообещающий метод с именем 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. Любой, кто знает здесь, знает непротиворечивый метод для преобразования объекта-оболочки Integer вint примитивный объект в Java?