所以我有2个通用接口.
第一个接口是这样实现的.
public interface First<E>
{
void method(E e)
}
public class FirstImpl implements First<String>
{
void method(String s) { System.out.println(s); }
}
public class FirstImpl2 implements First<Double>
{
void method(Double d) { System.out.println(d); }
}
Run Code Online (Sandbox Code Playgroud)
我还需要第二次接口的(第二界面如下图所示),泛型类型,只允许被实施第一界面的时候,在我们的例子中使用的类String和Double.是否有任何干净的方法来做这件事,比如
public interface Second <E, ? extends First<E>>
{
void method(E e);
}
public class SecondImpl <E> implements Second <E, ? extends First<E>>
{
void method(E e) { System.out.println(e); }
}
Run Code Online (Sandbox Code Playgroud)
,所以在第二的通用E将只适合String与Double所有被用来实现类First<E>?
没有。从这个意义上讲,您不能限制 Second 的泛型类型。您仍然可以独立提供另一种类型的信息。说,
class XYZ implements First<Bar> { ... }
Run Code Online (Sandbox Code Playgroud)
另一个类可以为第二个类提供另一种类型信息,例如
class ZYX implements Second<Foo, SomeOtherType<Foo>> { ... }
Run Code Online (Sandbox Code Playgroud)
假设 SomeOtherType 实现/扩展了 First 类型的任何内容。如果您想将这两个接口绑定到它们的泛型类型上,您可以在实现之间使用继承:
interface First<T> {}
interface Second<T> {}
class Foo<E extends T> implements First<T> {}
class Bar<E extends T> extends Foo<E> implements Second<E> {}
Run Code Online (Sandbox Code Playgroud)
现在,类型 E 通过 E 扩展 T 与类型 T 关联。
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |