基于通用接口的实现限制java中的泛型类型

时间:2015-05-10 14:15:51

标签: java generics

所以我有2个通用接口。

第一个接口是这样实现的。

var page3 = _navi.NavigationStack.FirstOrDefault(p => p is Page3Type);
if(page3 != null)
{
    _navi.RemovePage(page3);
}
await navi.PopAsync();

我需要第二个接口(第二个接口如下所示)泛型类型,只允许在实现第一个接口时使用的类,在我们的例子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); } } 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); } } 只适合EString以及用于实现Double的所有类?

1 个答案:

答案 0 :(得分:1)

不。在这个意义上,您不能限制Second的泛型类型。您仍然可以单独提供其他类型的信息。说,

class XYZ implements First<Bar> { ... }

另一个类可以为Second提供另一种类型的信息,例如

class ZYX implements Second<Foo, SomeOtherType<Foo>> { ... } 

假设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> {}

现在,类型E与类型T相关联,通过E扩展T.