2014-11-26 7 views
0

참고 : Hystrix과 관련하여이 질문은 구체적으로 다루지 만 그 내용은 Java generics에 관한 것이므로 그에 대한 답을 얻을 수 있습니다.하위 클래스 지정 및 제네릭

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 하위 클래스는 구체 유형 (문자열, Long, 위젯 등)에 대해 일반적입니다. 및
  3. 없음 컴파일러 오류 또는 경고가 여기에 자바 7에

는 존재하지 않습니다.

+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의 버그와 관련이 있음을 보여줍니다. 그거 사용하고 있니? 그렇다면 새로운 버전으로 업그레이드하면 문제가 해결 될 수 있습니다. –

관련 문제