请注意:虽然这个问题专门针对Hystrix,但它更多地涉及Java泛型,可以这样回答。
我正在尝试将HystrixCommand
与BaseCommand
子类化,然后可以通过我的应用程序的其余部分进行子类化。这个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
我怎样才能改写:
BaseCommand
和HystrixCommand
对于任何类型(T
,?
等都是通用的;);和BaseCommand
子类对于任何具体类型(String,Long,Widget等)是通用的;和在Java 7上。
答案 0 :(得分:1)
public class FunnyCommand extends BaseCommand<Widget> {
Widget
只是一种类型,因此您无需将其声明为类型变量。声明和使用看起来很相似的不幸的类似C的东西。
在以下代码中,标识符T
用于两个不同的角色。
public class BaseCommand<T> extends HystrixCommand<T> {
^ declare T ^use T