所以我有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); }
}
只适合E
和String
以及用于实现Double
的所有类?
答案 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.