java接口输入参数从基类扩展而来

Sea*_*yen 5 java generics

我想创建一个允许任何实现类的接口,如下所示:

public interface MyInterface
{

   void doSomething( <A extends MyBaseClass> arg1);
}

public class MyImpl implements MyInterface
{
  void doSomething ( SomeClassExtendsMyBaseClass arg1)
  {
    // do something
    // SomeClassExtendsMyBaseClass is a class that extends MyBaseClass
   }
}
Run Code Online (Sandbox Code Playgroud)

执行上述操作时出现语法错误.有人能告诉我如何实现这一目标吗?

谢谢

sal*_*der 16

public interface MyInterface<A extends MyBaseClass>
{

   void doSomething(A arg1);
}

public class MyImpl implements MyInterface<SomeClassExtendsMyBaseClass>
{
  public void doSomething ( SomeClassExtendsMyBaseClass arg1)
  {
    // do something
    // SomeClassExtendsMyBaseClass is a class that extends MyBaseClass
   }
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 8

@salexander有解决方案,但你必须这样做的原因是你的派生类试图更具体,你不能做.原因如下.

MyInterface mi = new MyImpl();
mi.doSomething(new MyOtherClassWhichExtendsMyBaseClass());
Run Code Online (Sandbox Code Playgroud)

在界面中你说你可以拿任何MyBaseClass,所以你必须尊重它.

在@ salexander的解决方案中,代码看起来像.

MyInterface<SomeClassExtendsMyBaseClass> mi = new MyImpl();
mi.doSomething(new MyOtherClassWhichExtendsMyBaseClass()); // compile error.
Run Code Online (Sandbox Code Playgroud)