簡體   English   中英

泛型:返回類型錯誤

[英]Generics: return type error

當我嘗試編譯文件時,出現以下錯誤:

方法聲明無效; 返回類型要求public get(int i)拋出SortingException {

方法聲明無效; 返回類型為必需的公共集(int i,Tlem)拋出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);
    }
}

<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{ 
      ...
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM