扩展类并实现接口的泛型类

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必须继承该方法.


mic*_*kig 6

你想做这样的事吗?

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.