请注意:尽管此问题专门针对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


我该如何重写:


BaseCommandHystrixCommand对于任何类型(T?等)都是通用的;和
BaseCommand子类对于任何具体类型(字符串,长整数,小部件等)都是通用的;和
不存在编译器错误或警告


在Java 7上。

最佳答案

public class FunnyCommand extends BaseCommand<Widget> {


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

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

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

09-11 10:28