когда я пытаюсь скомпилировать свой файл, я получаю следующие ошибки:
invalid method declaration; return type required public get(int i) throws SortingException{
invalid method declaration; return type required public set(int i, T elem) throws SortingException {
вот мои методы:
public static <T extends Comparable<T>> ArrayList<T> insertionSort(ArrayList<T> list, int ordinamento){
ArrayList<T> listaOrdenada;
listaOrdenada = new ArrayList<T>(list);
for(int x = 1 ; x < listaOrdenada.size(); x++){
T aux = listaOrdenada.get(x);
int y = x - 1;
while(y >= 0 && aux.compareTo(listaOrdenada.get(y)) < 0){
listaOrdenada.set(y + 1, listaOrdenada.get(y));
y--;
}
listaOrdenada.set(y + 1, aux);
}
return listaOrdenada;
}
public <T> set(int i, T elem) throws SortingException {
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).set(i, elem);
}
public <T> get(int i) throws SortingException{
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).get(i);
}




Вам необходимо объявить возвращаемый тип для ваших методов.
public <T> void set(int i, T elem) throws SortingException {
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).set(i, elem);
}
public <T> T get(int i) throws SortingException{
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).get(i);
}
Обратите внимание, что это предполагает, что ваш универсальный тип должен быть привязан на уровне метода. Кажется более вероятным, что это должно быть сделано на уровне класса, и в этом случае у вас должно быть что-то вроде.
public class YourClassName <T extends Comparable<T>> {
//Other methods and constructors goes here
public void set(int i, T elem) throws SortingException {
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).set(i, elem);
}
public T get(int i) throws SortingException{
if (i<0 || i>=(this.array).size()) throw new SortingException("ERRORE!");
return (this.array).get(i);
}
}
Почти наверняка нет OP намерен ввести методы, но ваш ответ предполагает это.
@Bohemian, вы, вероятно, правы, но именно это OP сделал в начальной версии. Я отредактировал ответ, включив второй вариант. Весь класс немного странный, так как он также включает статический метод InsertSort, которому, похоже, он не принадлежит.
Снять угловые скобки с <T>:
public T set(...) // return type is the instance’s type for T
public T get(...)
Синтаксис, который вы использовали public <T> setнапечатанный, метод с типом T, который скрывает тип класса и который обычно используется для объявления возвращаемого типа зависит от звонка, т.е. public <T> T set(...) вернет тип, который зависит от как, который вызывается (например, тип может быть выведен), и этот тип не будет иметь ничего общего с универсальным типом экземпляра, для которого он вызывается.
Использовать возвращаемый тип
public <T> T set(...)
Как вы заявляете:
public <T> set(int i, T elem) throws SortingException {...}
вы объявляете метод с ограниченной областью видимости T. Он не определяет никакого возвращаемого типа.
Значит, это ошибка компиляции.
В то время как следующее объявляет как тип метода с ограниченной областью действия T, так и этот T как возвращаемый тип:
public <T> T set(int i, T elem) throws SortingException {...}
Но определение типа метода с ограниченной областью видимости, вероятно, не является правильным способом решения вашей проблемы. Вы не показываете весь класс, но очень вероятно, что было бы плохой идеей определять универсальные методы методов с ограниченной областью видимости, поскольку универсальный тип должен удерживаться классом, поскольку эти универсальные методы, скорее всего, работают с одним и тем же универсальным типом.
Просто удалите <T> в объявлении метода и верните T, то есть общий класс:
public class MyClass<T>{
public static ArrayList<T> insertionSort(ArrayList<T> list, int ordinamento){
...
}
public void set(int i, T elem) throws SortingException {
...
}
public T get(int i) throws SortingException{
...
}
}
set, вероятно, также возвращаетT.