假设我有这两个界面...

public interface ObjectInterface { /* empty interface */ }

public interface ObjectHandler
{
    void handle(ObjectInterface object);
}


...还有一个实现ObjectInterface的具体类:

public class ConcreteObject implements ObjectInterface { /* ... */ }


为什么在Java中不允许这样做?

public class ConcreteHandler implements ObjectHandler
{
    @Override
    public void handle(ConcreteObject object) // <-- ObjectInterface implementation
    {
        // ...
    }
}


毕竟,ConcreteObject实现ObjectInterface接口。
但是,有没有一种方法可以用Java设计我的类来保持这种抽象模式呢?

最佳答案

您可以使用可接受的ObjectHandler的类来参数化ObjectInterface

public interface ObjectHandler<T extends ObjectInterface>
{
    void handle(T object);
}


并如下使用它:

public class ConcreteHandler implements ObjectHandler<ConcreteObject>
{
    @Override
    public void handle(ConcreteObject object) // <-- now this works
    {
        // ...
    }
}

09-28 02:07