请注意:尽管此问题专门针对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
子类对于任何具体类型(字符串,长整数,小部件等)都是通用的;和不存在编译器错误或警告
在Java 7上。
最佳答案
public class FunnyCommand extends BaseCommand<Widget> {
Widget
只是一种类型,因此您无需将其声明为类型变量。不幸的是,声明和使用类似于C的东西。在以下代码中,标识符
T
以两种不同的角色使用。public class BaseCommand<T> extends HystrixCommand<T> {
^ declare T ^use T