Dmi*_*sev 55 java generics android
为了减少类的依赖,我想将参数(使用泛型类)发送到扩展某些类并实现接口的构造函数,例如
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);
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
另外,使用我的T类,我想创建视图,使用T.getActivity()作为Context.
Pau*_*ora 123
T必须扩展Fragment并实现SomeInterface
在这种情况下,您可以声明SomeClass如下:
public class SomeClass<T extends Fragment & SomeInterface>
Run Code Online (Sandbox Code Playgroud)
这将需要类型的对象T来扩展Fragment和实现SomeInterface.
此外,使用我的T类,我想使用T.getActivity()作为Context创建视图.
我不熟悉Android,但是如果getActivity()是在Fragment那时声明的公共实例方法将完全可以在实例上调用它T,因为编译器将知道所有Ts必须继承该方法.
你想做这样的事吗?
class SomeClass {}
interface SomeInterface{
public void someMethod();
}
class AGenericClass<T> extends SomeClass implements SomeInterface {
public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)
这是允许的.
但是Android的具体问题是什么?我想我一定错过了什么,所以你能提供更多细节吗?
更新如下
我仍然不完全确定你想做什么,我也不确定你是否需要立即担心依赖性,但这也是合法的,使用有界类型参数:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
type参数<T extends Fragment & SomeInterface>指定T应该是子类Fragment和实现SomeInterface.
| 归档时间: |
|
| 查看次数: |
52722 次 |
| 最近记录: |