我定义了一个简单的基接口,使用抽象类作为参数保存一个方法。
public interface IVisitor {
void visit(BaseVehicle vehicle);
}
此基本接口可以通过另一个接口进行扩展,该接口应该能够使用更具体的类多次从基接口重载此方法。
public interface ISpecificVisitor extends IVisitor {
void visit(TruckCar car);
void visit(Lory car);
}
是否可以使用泛型编写基接口,以便子接口可以/必须使用更具体的类重载?如果是,那会是什么样的?
答案 0 :(得分:7)
这应该适合你:
public interface IVisitor<T extends BaseVehicle> {
void visit(T vehicle);
}
答案 1 :(得分:0)
你可以这样做,但由于类型擦除,你不能以优雅的方式做到这一点:
public interface Vehicle {}
public class Car implements Vehicle {}
public class Boat implements Vehicle {}
public interface IVisitor<C extends Vehicle, B extends Vehicle> {
// These methods have the same erasure, compile time error.
// void visit(C vehicle);
// void visit(B vehicle);
// ugly workaround.
void visitC(C vehicle);
void visitB(B vehicle);
}
public class SpecificVisitor implements IVisitor<Car, Boat> {
@Override
public void visitC(Car vehicle) {}
@Override
public void visitB(Boat vehicle) {}
}