当前位置: 首页 > 知识库问答 >
问题:

声明一个既扩展类又实现接口的属性

殳俊晤
2023-03-14

我发现了这个问题:必须扩展类 A 并实现某个接口的成员变量

并且想知道是否有更好的方法。在方法中将其作为参数传递可以:

public <T extends Activity & IMyInterface> void start(T _callback) {
    callback = _callback;
}

但是如何正确地将< code>callback声明为属性呢?这个:

Class<? extends Activity & IMyInterface> callback;

给出语法错误。

共有2个答案

司马晋
2023-03-14

如果您想要声明一个扩展类和实现接口的变量,您必须在类级别上声明类型变量,因为基于这个文档,您不能在类属性上声明类型变量

public class MyClass<T extends MyType & MyInterface>{
  T extendsBothMyTypeAndInterface;
}
霍浩皛
2023-03-14

问题是 T 不是 Class 的实例,您可以将其声明为:

Object callback;
MyType callback;
MyInterface callback;

或者,您可以将类定义为泛型,如下所示:

public class Example<T extends MyType & MyInterface>{
   T callback
}
 类似资料:
  • 在 Gradle 领域模型中所有被增强的对象能够拥有自己定义的属性. 这包括,但不仅限于 projects , tasks , 还有 source sets . Project 对象可以添加,读取,更改扩展的属性. 另外,使用 ext 扩展块可以一次添加多个属性. 例子 13.3. 使用扩展属性 build.gradle apply plugin: "java" ext { springV

  • 问题内容: 为了减少类的依赖性,我想将参数(使用泛型类)发送到扩展某些类并实现接口的构造函数,例如 可能吗? 此外,使用T类,我想使用T.getActivity()作为Context创建视图。 问题答案: T必须扩展Fragment并实现SomeInterface 在这种情况下,您可以声明以下内容: 这将需要扩展和实现类型的对象。 此外,使用T类,我想使用T.getActivity()作为Cont

  • 特定于 Declarative 映射API。 在 1.4 版更改: 绝大多数声明性扩展现在集成到SQLAlchemy ORM中,并且可以从 sqlalchemy.orm 命名空间。请参阅上的文档 声明性映射 对于新文档。有关更改的概述,请参见 声明式现在集成到ORM中,具有新的特性 . Object Name Description AbstractConcreteBase “concrete”声

  • 但是现在,我希望这些接口实现也可用于扩展,例如。 我如何设置我的课程来实现这一点?(或者,反对这样做的固有缺陷或代码气味是什么?)

  • 问题内容: 我有以下类和接口: 我想创建一个方法,其中参数需要为BasicObject类型并实现CodeObject。我尝试了以下代码,但不能保证clazz是实现CodeObject的类。 我想做这样的事情,但不能编译: 问题答案: 您的模式类必须扩展和扩展/实现(实际上是一个接口)。您可以使用方法签名的通配符定义中声明的多个类来执行此操作,如下所示: 请注意,如果您通过以下任何一种方式进行操作,

  • 我有以下类和接口: 我想创建一个方法,其中参数需要是BasicObject类型,并实现CodeObject。我尝试了以下代码,但它不能保证clazz是一个实现CodeObject的类。 我想做这样的事情,但它无法编译: