我有两个具有某些共同属性的类:
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中做到这一点
答案 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);
}