我有一个执行基本操作的抽象类,现在我想强制每个派生类都有一个方法" check",但重点是我对这个方法一无所知。例如,抽象类:
public abstract class Service<T extends Transport> {
public T getTransport(int id) {
[...]
}
public abstract boolean checkTransport(T transport, ...);
}
和两个实施类:
public ServiceAAA extends Service<ClassA> {
public boolean checkTransport(ClassA t) {
[...]
}
}
public ServiceBBB extends Service<ClassB> {
public boolean checkTransport(ClassB t, Integer value, Integer otherValue) {
[...]
}
}
ServiceBBB需要两个参数来检查ClassB类的对象t。 当然它没有用,有没有办法强制子类实现checkTransport方法而不使用&#34;对象......&#34;符号
答案 0 :(得分:1)
不,没有。
让我们假装 一种方式。您将如何从抽象Service类或从引用此对象的任何调用站点Service<...>
调用此方法?没有办法知道特定子类的方法需要什么,因此无法调用该方法。
解决这个问题的一种方法是将检查器作为一个类传递给Service;也就是说,使用组合而不是继承。如果你这样做,你可以让检查器的接口完全没有额外的参数(例如,Predicate
可能有效),并且实现该检查器的特定子类可以在构造时传递参数时间。