0

我定义了一个简单的基本接口,其中包含一个以抽象类作为参数的方法。

public interface IVisitor {
    void visit(BaseVehicle vehicle);
}

这个基接口可以被另一个接口扩展,它应该能够用更具体的类多次从基接口重载这个方法。

public interface ISpecificVisitor extends IVisitor {
    void visit(TruckCar car);
    void visit(Lory car);
}

可以用泛型编写基本接口,以便子接口可以/必须用更具体的类重载吗?如果是,那会是什么样子?

4

2 回答 2

7

这应该适合你:

public interface IVisitor<T extends BaseVehicle> {
    void visit(T vehicle);
}
于 2013-05-06T14:15:21.303 回答
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) {}
}
于 2013-05-06T14:35:00.587 回答