簡體   English   中英

創建具有通用簽名的通用方法

[英]Create a generic method with generic signature

我有一些我想刪除的冗余代碼,我的目標是創建這種方法:

private GenericClass myMethod(GenericClass genericClass){
    genericClass.getTipe(); //tipe1 or tipe2
    genericClass.setValue("foo");
    genericClass.setValue2("foo");
    //some logic
    return genericClass;

}

該方法可以傳遞兩個相似的類,但它們的屬性類型不同

public class Class1{
   private Tipe1 tipe1;
   private String value; 
   private String value2;
   //Constructor,Getter and Setter
}

public class Class2{
   private Tipe2 tipe2;
   private String value; 
   private String value2;
   //Constructor,Getter and Setter
}

我想做的是調用該方法

someServiceIml.myMethod ("Foo")

根據我的需要傳遞Class1Class2類型的對象, myMethod背后的業務邏輯實際上是相同的。

這種方法我希望它在某個服務的同一實現中,你能給我一些解決方案嗎?

創建一個泛型抽象類型; 超類或接口:

public interface GenericClass<T> {
    public T getTipe();
    public void setValue(String s);
    public void setValue2(String s);
}

讓您的實現類實現它:

public class Class1 implements GenericClass<Tipe1> {
    // leave implementation as is
}

public class Class2 implements GenericClass<Tipe2> {
    // leave implementation as is
}

並輸入您的方法:

private <T> GenericClass<T> myMethod(GenericClass<T> genericClass){
    T tipe = genericClass.getTipe();
    genericClass.setValue("foo");
    genericClass.setValue2("foo");
    // some logic
    return genericClass;
}

如果Tipe1Tipe2共享一個公共類型,您也可以鍵入它們:

public interface GenericClass<T extends SomeTipe> {
public class MyClass {
    public static void main(String args[]) {
      
        Class1 c1 = new Class1();
        
        Class2 c2 = new Class2();

        GenericClass gc = myMethod(c1);
        
        System.out.println(gc);
    }
    
    private static GenericClass myMethod(GenericClass genericClass){
        genericClass.getTipe(); //tipe1 or tipe2
        genericClass.setValue("foo");
        genericClass.setValue2("foo");
        //some logic
        return genericClass;
    }
}

class Class1 extends GenericClass<Tipe1>{

}

class Class2 extends GenericClass<Tipe2>{

}

class Tipe1 {
    
}
class Tipe2 {
    
}

class GenericClass<T> implements Tipe<T> {
    private String value;
    private String value2;
    private T t;
    
    public T getTipe() {
        return t;
    }
    
    void setValue(String s) {
        value = s;
    }
    void setValue2(String s) {
        value2 = s;
    }
}

interface Tipe<T> {
    public T getTipe();
}

或者您可以轉換為父類,例如:

GenericClass gc = new Class2();

暫無
暫無

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

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