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

2022-08-31 15:32:33

为了减少类的依赖性,我想将参数(使用泛型类)发送到扩展某些类并实现接口的构造函数,例如

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 类,我想创建视图,使用 T.getActivity() 作为上下文。


答案 1

T 必须扩展 Fragment 并实现 SomeInterface

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

public class SomeClass<T extends Fragment & SomeInterface>

这将需要一个类型的对象来扩展和实现 。TFragmentSomeInterface

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

我不熟悉Android,但是如果是一个公共实例方法声明,那么完全有可能在的实例上调用它,因为编译器将知道所有s必须继承该方法。getActivity()FragmentTT


答案 2

你想做这样的事情吗?

class SomeClass {}

interface SomeInterface{
    public void someMethod();
}

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

这是允许的。

但是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();
    }
}

type 参数指定 应为 的子类 并实现 。<T extends Fragment & SomeInterface>TFragmentSomeInterface


推荐