我想创建一个允许任何实现类的接口,如下所示:
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)
@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)
| 归档时间: |
|
| 查看次数: |
9053 次 |
| 最近记录: |