Проблемы с распаковкой - PullRequest
       38

Проблемы с распаковкой

3 голосов
/ 06 февраля 2011

У меня есть класс, который расширяет класс LinkedList.Вот выдержка из кода:

class SortedList<Integer> extends LinkedList<Integer> {
      int intMethod(Integer integerObject){
          return integerObject;
      }
}

Ожидается, что будет возвращено автоматически распакованное значение типа int.Но по какой-то причине компилятор выдает ошибку, которая говорит о том, что типы несовместимы и что требуемый тип был int, а найденный тип был Integer.Это отлично работает в другом классе!Что дает?(

Ответы [ 2 ]

10 голосов
/ 06 февраля 2011

Это потому что у вас есть <Integer> после SortedList.

Обычно вы используете T для параметров типа: class SortedList<T>, но вместо этого вы используете Integer. То есть вы сделали Integer параметр типа (который затеняет java.lang.Integer).

Ваш класс в его нынешнем виде эквивалентен

class SortedList<T> extends LinkedList<T> {
      int intMethod(T integerObject){
          return integerObject;         // <--  "Cannot convert from T to int"
      }
}

Удалите параметр типа, и он работает просто отлично:

class SortedList extends LinkedList<Integer> {
      int intMethod(Integer integerObject){
          return integerObject;
      }
}
2 голосов
/ 06 февраля 2011

Проблема в том, что вы объявили Integer как параметр общего типа для класса SortedList. Поэтому, когда вы ссылаетесь на Integer как на параметр метода intMethod, это означает параметр типа, а не тип java.lang.Integer, который вы, я подозреваю, имели в виду. Я думаю, что вы хотите:

class SortedList extends LinkedList<Integer> {
    int intMethod(Integer integerObject){
        return integerObject;
    }
}

Таким образом, SortedList - это всегда список целых чисел, и я подозреваю, что это то, чего вы пытались достичь. Если вы действительно хотите сделать SortedList универсальным типом, вы, вероятно, захотите:

class SortedList<T> extends LinkedList<T> {
    int intMethod(Integer integerObject){
        return integerObject;
    }
}
...