有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java子类化和泛型

请注意:虽然这个问题专门涉及Hystrix,但它实际上更多地是关于Java泛型的,可以这样回答

我试图用一个BaseCommand子类化^{},然后可以由我的应用程序的其余部分子类化。这个BaseCommand将包括其他命令子类可以免费继承的各种好处

我迄今为止最好的尝试是:

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

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

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

The class com.netflix.hystrix.HystrixCircuitBreaker$UnitTest$BaseCommand refers to the class com.netflix.hystrix.HystrixCircuitBreaker$UnitTest$BaseCommand and uses 1 parameters, but the referred class takes no parameters

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

The type parameter String is hiding the type String

我怎样才能重写它,以便:

  1. BaseCommandHystrixCommand任何类型(T?等)的泛型;及
  2. BaseCommand子类是任何具体类型(String、Long、Widget等)的泛型;及
  3. 不存在编译器错误或警告

这里是Java7


共 (1) 个答案

  1. # 1 楼答案

    public class FunnyCommand extends BaseCommand<Widget> {
    

    Widget只是一个类型,所以不需要将其声明为类型变量。不幸的是,声明和使用看起来很相似

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

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