0

メソッドをジェネリックとして実装する必要があります。どうやってするの ?

public SelectItem[] criarFiltroSexo(Sexo[] tp){
SelectItem[] options = new SelectItem[tp.length]; 
       for(int i = 0; i < tp.length; i++) {  
           options[i] = new SelectItem(tp[i].getId(),tp[i].getDescricao());  
       }  
       return options;  
}

このようなメソッドをさらに実装する必要があり、異なるエンティティごとに複製する必要があります。したがって、多くのメソッド criarFiltroxxx があります。

私はこのようなものを実装したいと思います:

public <E> criarFiltrogenerico(E[] tp){
        SelectItem[] options = new SelectItem[tp.length]; 
        for(int i = 0; i < tp.length; i++) {  
            options[i] = new SelectItem(tp[i].getId(),tp[i].getDescricao());  
        }  
         return options;
    }

しかし、エラーメッセージが表示されました:メソッドの戻り値の型がありません.....

4

3 に答える 3

2

しかし、エラーメッセージが表示されました:メソッドの戻り値の型がありません.....

行で:

public <E> criarFiltrogenerico(E[] tp) {

あなたが持っているのはpublic、キーワード、<E>型変数、criarFiltrogenerico(E[] tp)メソッド名、およびパラメーターです。

当然、戻り値の型がありません。それを追加します:

public <E> RETURN-TYPE-HERE criarFiltrogenerico(E[] tp) {

したがって、これは機能します:

public <E> SelectItem[] criarFiltrogenerico(E[] tp) {
        SelectItem[] options = new SelectItem[tp.length]; 
        for(int i = 0; i < tp.length; i++) {  
            options[i] = new SelectItem(tp[i].getId(),tp[i].getDescricao());  
        }  
        return options;
}

注意点として、型には メソッドとメソッドEが必要です。これらのメソッドを持つ親クラス/インターフェースがある場合、たとえば(whereまたは)、次を使用する必要があります。getId()getDescricao()ParentItemSexo extends ParentItemSexo implements ParentItem

public <E extends ParentItem> SelectItem[] criarFiltrogenerico(E[] tp) {
于 2013-06-26T12:52:32.133 に答える
0

使用する必要があるメソッドを持つインターフェイスを作成します。

interface HasIdAndDescricao {
    int getId();
    String getDescricao();
}

メソッドで使用するクラスにそのインターフェイスを追加します。

class Sexo implements HasIdAndDescricao {
    // no change required
}

ジェネリックをインターフェイスにバインドします。

public <T extends HasId> SelectItem[] criarFiltrogenerico(T[] tp){
    SelectItem[] options = new SelectItem[tp.length]; 
    for(int i = 0; i < tp.length; i++) {  
        options[i] = new SelectItem(tp[i].getId(), tp[i].getDescricao());  
    }  
    return options;
}

メソッド本体を変更せずに、代わりに varargs パラメータを使用することもできます。

public <T extends HasId> SelectItem[] criarFiltrogenerico(T... tp){
    // same body
}
于 2013-06-26T12:49:53.687 に答える