2014-11-26 4 views
0

Обратите внимание, что: хотя этот вопрос касается конкретно Hystrix, его действительно больше о Java-дженериках и на который можно ответить как таковой.Подклассы и дженерики

Я пытаюсь подкласса HystrixCommand с 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. BaseCommand и HystrixCommand являются общими для любого типа (T, ? и т.д.); и
  2. BaseCommand подклассы являются общими для любые конкретный тип (строка, длинная, виджет и т. д.); и
  3. Никаких ошибок компилятора или предупреждения не существует

На Java-здесь.

+1

Пожалуйста, подтвердите свой код или исправить ошибку. Вторая ошибка не может применяться к коду, который вы указали. –

+0

Этот 'FunnyCommand ' объявляет параметр типа 'Widget' независимо от любого типа Widget, который вы указали где-либо еще. –

ответ

1
public class FunnyCommand extends BaseCommand<Widget> { 

Widget просто тип, так что вам не нужно объявлять его в качестве переменной типа. Несчастная C-подобная вещь, декларация и использование которой похожи.

В следующем коде идентификатор T используется в двух разных ролях.

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

Спасибо @Tom Hawtin - tackline (+1) - однако, когда я меняю «FunnyCommand ' '' FunnyCommand', я по-прежнему получаю ту же ошибку. Идеи? – IAmYourFaja

+0

@IAmYourFaja Um, dunno. Выглядит странная ошибка. Быстрый google показывает, что это связано с ошибкой в ​​старых версиях NetBeans. Вы используете это? Если обновление в новой версии может быть исправлено. –