【问题标题】:Declare an attribute that both extends a class and implements an interface声明一个既扩展类又实现接口的属性
【发布时间】:2014-05-02 12:12:23
【问题描述】:

我发现了这个问题:Member variable which must extend class A and implement some interface

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

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

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

Class<? extends Activity & IMyInterface> callback;

给出一个语法错误。

【问题讨论】:

  • 不应该是&lt;T extends Activity implements IMyInterface&gt;吗?你实现一个接口,而不是扩展它。
  • @ThaMe90 我的想法也是如此,但根据这个:stackoverflow.com/questions/10641584/… 这就是它的完成方式。
  • 哈,我从来不知道(我找到了与之相伴的doc)。

标签: java


【解决方案1】:

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

Object callback;
MyType callback;
MyInterface callback;

或者你可以像这样定义你的类是通用的:

public class Example<T extends MyType & MyInterface>{
   T callback
}

【讨论】:

    【解决方案2】:

    如果要声明扩展类并实现接口的变量,则必须在类级别声明类型变量,基于此doc,不能在类属性上声明类型变量。

    public class MyClass<T extends MyType & MyInterface>{
      T extendsBothMyTypeAndInterface;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 2013-08-12
      • 1970-01-01
      • 2013-09-04
      • 2016-04-28
      相关资源
      最近更新 更多