如何在接口中使用泛型方法参数?

时间:2013-05-06 14:13:14

标签: java generics

我定义了一个简单的基接口,使用抽象类作为参数保存一个方法。

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

此基本接口可以通过另一个接口进行扩展,该接口应该能够使用更具体的类多次从基接口重载此方法。

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

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

2 个答案:

答案 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) {}
}