我有一个抽象类
public abstract class Integrator {
public abstract Point integrate();
public abstract Point function(Double x, Point y);
}
由
扩展public abstract class Euler extends Integrator {
public Point integrate() {
... // this calls function(x, y)
}
}
public abstract class Central extends Integrator {
public Point integrate() {
... // this calls function(x, y)
}
}
两者都以不同方式实现 integrate()
。现在,我实例化的具体类定义如下
public class EulerIVP extends Euler {
public EulerIVP(...) { ... }
public Point function(Double x, Point y) {
...
}
}
public class CentralIVP extends Central {
public CentralIVP(...) { ... }
public Point function(Double x, Point y) {
...
}
}
它们都以完全相同的方式实现 function()
,但将使用其父级的 integrate()
。因为 Euler
和 Central
是抽象的
,所以它们都扩展 IVP
类没有意义。所以我希望我能做这样的事情
public class IVP<T extends Integrator> extends T {
public IVP(...) { ... }
public Point function(Double x, Point y) { ... }
}
Integrator eulerIntegrator = new IVP<Euler>(...);
Integrator centralIntegrator = new IVP<Central>(...);
但我不能,因为我相信这里的 T
是类型而不是类。我可以做类似的事情吗?
最佳答案
您可以使用组合而不是继承。像这样的东西:
public class IVP {
private Integrator integrator;
public IVP(Integrator integrator) {
this.integrator = integrator;
}
public Point function(Double x, Point y) {
// Calculate using integrator.integrate();
}
}
然后使 euler 成为一个非抽象类:
IVP eulerIVP = new IVP(new Euler());
关于java - 扩展泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13213994/