扩展类和实现接口的generics类

为了减less类的依赖,我想把参数(使用generics类)发送给扩展某个类的构造函数并实现接口,例如

public interface SomeInterface{ public void someMethod(); } public class MyFragment extends Fragment implements SomeInterface{ //implementation } //here is classs, that I need to create. T must extend Fragment and implements //SomeInterface. But, I'm afraid, if I'll use MyFragment directly, it will create a //dependence of SomeClass from MyFragment. public class SomeClass /*generic?*/ { public SomeClass(T parent); } 

可能吗?

进一步,使用我的T类,我想创build视图,使用T.getActivity()作为上下文。

T必须扩展Fragment并实现SomeInterface

在这种情况下,你可以声明SomeClass如下:

 public class SomeClass<T extends Fragment & SomeInterface> 

这将需要一个Ttypes的对象来扩展Fragment并实现SomeInterface

此外,使用我的T类,我想创build视图,使用T.getActivity()作为上下文。

我不熟悉Android,但是如果getActivity()是在Fragment声明的公共实例方法,那么完全可以在T的实例上调用它,因为编译器会知道所有的T必须inheritance该方法。

你想做这样的事吗?

 class SomeClass {} interface SomeInterface{ public void someMethod(); } class AGenericClass<T> extends SomeClass implements SomeInterface { public void someMethod() {} } 

这是允许的。

但是,关于您的问题的Android具体是什么? 我想我一定会错过一些东西,所以你能提供更多的细节?

下面更新

我仍然不完全确定你想要做什么,我也不确定你需要担心立即依赖,但这也是合法的,使用有界的types参数 :

 interface SomeInterface{ public void someMethod(); } class Fragment { public void aMethodInFragment() { } } public class SomeClass <T extends Fragment & SomeInterface> { public SomeClass(T parent) { parent.someMethod(); parent.aMethodInFragment(); } } 

types参数<T extends Fragment & SomeInterface>指定T应该是Fragment的子类并实现SomeInterface

如果我明白你正确的理解你有一些正在扩展Fragment和实现一些接口的typesT,这很容易。 所以你必须写这样的东西。

 abstract class TemplateFragment extends Fragment implements SomeInterface{} 

然后在你的课堂上

 class SomeClass<T extends TemplateFragment> { ... } 

它会做的伎俩。