扩展类和实现接口的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>
这将需要一个T
types的对象来扩展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> { ... }
它会做的伎俩。