两类具有某些共同属性的无遗产

时间:2018-08-27 09:02:59

标签: java

我有两个具有某些共同属性的类:

public class A { 
private String a;
private String b;
private String c;
// setters & getters
}
public class B {
private String a;
private String b;
private String c;
// setters & getters
}

在没有聘用的情况下,我想创建一个可以接受这两个类之一的通用方法

public <T> void myMethod(T object){
object.getC(); // "c" attribute of class A and B
}

我如何在Java 8中做到这一点

4 个答案:

答案 0 :(得分:2)

您可以定义如下接口:

interface ISomeInterfaceToGetC {
    String getC();
}

实现很简单:

class A implements ISomeInterfaceToGetC {
    @Override
    public String getC(){
        return c;
    }
}

这两个类都可以实现此接口,而不是传递T object,而可以传递ISomeInterfaceToGetC implementationObject并调用implementationObject.getC();,这将返回您的String。

答案 1 :(得分:1)

为什么不只是去寻找单独的POJO类,它将为该通用代码提供服务,而无需继承或实现。

class Data{
    private String a;
    public String getA(){
        return this.a;
    }
    /* TO DO */
}

class A {
   private Data data;
    /* TO DO */
}

class B {
   private Data data;
    /* TO DO */
}

public void myMethod(Data data){
    data.getA();
}

答案 2 :(得分:1)

如果您想要一种通用的方法来执行此操作,则可以按照以下步骤操作。

a 。首先定义一个接口

    public interface Sea {

       public int getC();
    }

b 。然后,类让您的两个类实现该接口。

public class Eh implements Sea {

    private int c = -1;

    @Override
    public int getC() {
        return c;
    }
}

public class Bee implements Sea {

    private int c = -1;

    @Override
    public int getC() {
        return c;
    }
}

c 。现在,您可以使用带有参数的泛型方法,该参数采用从接口Sea实现的任何泛型对象。

public class GenericClass<T extends Sea> {
    public void getGenericSea(T object) {
        object.getC();
    }
}

答案 3 :(得分:0)

我还建议您在此处使用和接口。但是,如果您真的想遵循原来的方式。以下是一个示例。

public <T> void myMethod(T object){
    String val;//Common type for both Class A and B

    if (object instanceof A)
        val = ((A) object).getC();
    else if (object instanceof B)
        val = ((B) object).getC();
    else
        val = null; //Unsupported type

    System.out.println(val);
}