当我尝试编译我的文件时,我遇到了这些错误:
无效的方法声明;需要返回类型 public get(int i)throws SortingException {
无效的方法声明;需要返回类型 public set(int i,T elem)抛出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);
}
答案 0 :(得分:1)
您需要声明方法的返回类型。
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);
}
}
答案 1 :(得分:1)
从<T>
删除尖括号:
public T set(...) // return type is the instance’s type for T
public T get(...)
您使用的语法public <T> set
键入类型为T
的方法,该方法模糊了类的类型,通常用于声明随着调用而变化,即public <T> T set(...)
将返回一个类型,该类型依赖于如何调用该方法(例如,可以推断出类型)并且该类型将没有任何内容与调用它的实例的泛型类型有关。
答案 2 :(得分:0)
使用返回类型
public <T> T set(...)
答案 3 :(得分:0)
当你宣布:
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{
...
}
}