创建具有通用签名的通用方法

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背后的业务逻辑几乎相同。

这个方法我希望它在某个服务的同一个实现中,你能给我一些解决方案吗?

创建通用抽象类型;超级 class 或接口:

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

让你的实施 class 实施它:

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();
}

或者您可以转换为父级 class,例如:

GenericClass gc = new Class2();