子类和泛型

时间:2014-11-26 22:22:56

标签: java generics inheritance subclass

请注意:虽然这个问题专门针对Hystrix,但它更多地涉及Java泛型,可以这样回答。

我正在尝试将HystrixCommandBaseCommand子类化,然后可以通过我的应用程序的其余部分进行子类化。这个BaseCommand将包含其他命令子类可以免费继承的各种好东西。

到目前为止我的最佳尝试:

public class BaseCommand<T> extends HystrixCommand<T> {
    // Stuff
}

public class FunnyCommand<Widget> extends BaseCommand<Widget> {
    // Stuff
}

但是这会产生以下编译器错误:

  

类com.netflix.hystrix.HystrixCircuitBreaker $ UnitTest $ BaseCommand引用类com.netflix.hystrix.HystrixCircuitBreaker $ UnitTest $ BaseCommand并使用1个参数,但引用的类不带参数

它还会产生以下编译器警告:

  

类型参数String隐藏类型String

我怎样才能改写:

  1. BaseCommandHystrixCommand对于任何类型(T?等都是通用的;);和
  2. BaseCommand子类对于任何具体类型(String,Long,Widget等)是通用的;和
  3. 不存在编译器错误或警告
  4. 在Java 7上。

1 个答案:

答案 0 :(得分:1)

public class FunnyCommand extends BaseCommand<Widget> {

Widget只是一种类型,因此您无需将其声明为类型变量。声明和使用看起来很相似的不幸的类似C的东西。

在以下代码中,标识符T用于两个不同的角色。

public class BaseCommand<T> extends HystrixCommand<T> {
                         ^ declare T               ^use T