java我可以访问传递给引用派生类的泛型基类的类型的数据吗?
我有一个抽象的泛型基类,从中创建了两个派生类。基类有两种类型,这两种类型对于每个派生类都是不同的
我希望能够编写共享代码,允许我访问其中一个传递类型上的一个属性的方法。我不确定这是否可能
import lombok.Data;
@Data
public class GenericBase<T, U> {
private T oneType;
private U secondType;
public GenericBase() {}
public GenericBase(T oneType, U secondType) {
this.oneType = oneType;
this.secondType = secondType;
}
}
import lombok.Data;
@Data
public class DerivedOne<C, C1> extends GenericBase<ClassOne, ClassTwo> {
public DerivedOne(ClassOne classOne, ClassTwo classTwo) {
super(classOne, classTwo);
}
private String dummyString;
private String dummyName;
}
import lombok.Data;
@Data
public class DerivedTwo extends GenericBase<ClassThree, ClassFour>{
public DerivedTwo(ClassThree classThree, ClassFour classFour) {
super(classThree, classFour);
}
private Integer num1;
private Integer num2;
}
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class ClassOne {
private String name;
private Integer age;
private String address;
}
import lombok.AllArgsConstructor;
import lombok.Data;
@AllArgsConstructor
@Data
public class ClassTwo {
private String ssNumber;
private String dob;
}
import lombok.Data;
import lombok.AllArgsConstructor;
@Data
@AllArgsConstructor
public class ClassThree {
private String someDescription;
private int amount;
}
import lombok.Data;
import lombok.AllArgsConstructor;
@AllArgsConstructor
@Data
public class ClassFour {
private Integer salary;
private String carModel;
}
然后,如果我实例化“类型”类和派生类,我希望能够从该类访问一个方法
@SpringBootApplication
public class GenericsTestApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(GenericsTestApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
ClassOne c1 = new ClassOne("Fred", 27, "123 main street");
ClassTwo c2 = new ClassTwo("123-45-6789", "03/21/57");
ClassThree c3 = new ClassThree("some description", 25);
ClassFour c4 = new ClassFour(25000, "Forester");
DerivedOne<ClassOne, ClassTwo> d1 = new DerivedOne<>(c1, c2);
DerivedTwo d2 = new DerivedTwo(c3, c4);
Integer val = func1(d2);
}
static Integer func1(GenericBase genericBase) {
return genericBase.getSecondType().getSalary(); <-- doesn't know how to resolve symbol getSalary
}
}
我之所以希望这样做,是因为一个方法中存在一些重复的代码,这些代码存在于不同的类中,而这些类只因传入的派生类而异。因此,该方法是使用泛型基类定义的,它不知道用于创建派生类的类型的结构
有没有办法处理这个问题,或者我被重复的代码困住了
谢谢
# 1 楼答案
您可以声明一个像HasSalary这样的接口,并让ClassFour实现这个方法
德拉卡:你是怎么做的