当前位置: 首页 > 面试题库 >

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

邬安邦
2023-03-14
问题内容

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

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()作为Context创建视图。


问题答案:

T必须扩展Fragment并实现SomeInterface

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

public class SomeClass<T extends Fragment & SomeInterface>

这将需要T扩展Fragment和实现类型的对象SomeInterface

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

我不熟悉Android,但如果getActivity()在中声明了公共实例方法,Fragment则完全有可能在的实例上调用它T,因为编译器将知道所有都T必须继承该方法。



 类似资料:
  • 问题内容: 我不明白为什么要编译。我以为它检查了但没有检查? 问题答案: 泛型中的关键字在语义上与常规关键字略有不同。 当使用在泛型的上下文中,例如,这意味着,应该是一个类型的 任一 实现的接口(在情况下,当是接口), 或者 是子类(如果是一个类)。 可能的原因是,如果Generics中支持该关键字,则会使类型参数声明过于冗长。 例如,您将拥有: 相反,此方法的有效语法为: 实际上,您不需要关键字

  • 我正在寻找一个类型安全的,选中的解决方案,以添加一个元素到一个列表,它的泛型需要一个类和一个接口。该示例说明了我想要做的事情--将一个对象添加到一个列表中,该对象的类型扩展了并实现了,其中。 当然,将转换为会解决编译错误,但这将被取消检查。 有什么办法解决这个问题吗?如果没有,有没有人知道编译器不允许这样做的原因?

  • 问题内容: 我正在尝试重构M类型确实扩展了任何内容的类和子类集,即使我们知道它必须是某种类型的子类也是如此。该类型已参数化,我希望其参数化类型可用于已经具有M值的子类。 有什么方法可以定义此类,而不必在参数列表中包括冗余的K和V泛型类型。我希望能够使编译器从子类映射到的M中推断出它们。 换句话说,我希望类声明看起来像这样: 从M的定义可以推断出K和V的类型。 问题答案: 问题在于,它们并没有真正地

  • 假设我想要一个类型变量T,它扩展了某个类并实现了一个接口。类似于: Kotlin中的语法是什么?

  • 问题内容: 我试图在这样的泛型类中创建一个常规的RuntimeException: 这段代码使我对这个词的错误说法。 这个RuntimeException与我的类通用有什么关系? 问题答案: Java不允许Throwable的通用子类。而且,非静态内部类可以通过其外部类的类型参数有效地进行参数化(请参见Oracle JDK Bug 5086027 )。例如,在您的示例中,内部类的实例具有form类