2013-10-23 4 views
0

<Integer, "sometype">과 2 개의 HashMaps가 있습니다. 그래서 "sometype"이 다를 수 있으므로 일반화하려고했습니다.Java 제네릭 : 일반적인 메서드 호출 "... 인수에 적용 할 수 없습니다 ..."

this.input_map = MapOperations.<JComponent> rearrengeHashMapIdx(this.input_map); 

번째 통화 나 제공 <Integer, CustomClass>

this.values_map = MapOperations.<UI_FieldPV>rearrengeHashMapIdx(this.input_map); 

와 해시 MAP 통과하는 다음과 같다 :이 경우 내 두 한다거나 할이

private HashMap<Integer, UI_FieldPV> values_map = new HashMap<Integer, UI_FieldPV>(); 
private HashMap<Integer, JComponent> input_map = new HashMap<Integer, JComponent>(); 

방법의 첫 번째 통화가 괜찮있다 다음 오류 :

The parameterized method <UI_FieldPV>rearrengeHashMapIdx(HashMap<Integer,UI_FieldPV>) of type UI.MapOperations is not applicable for the arguments (HashMap<Integer,JComponent>)

일반 메서드가 포함 된 클래스의 코딩 (btw : 호출 클래스 내에서 일반 메서드를 만들려고했지만 작동하지 않았습니다. 나는 일반적인 방법 PARAMATERS 작동하게하는?) 그래서 내가 뭘 잘못

private static class MapOperations<T> { 
    public static <T> HashMap<Integer, T> rearrengeHashMapIdx(HashMap<Integer, T> source) { 

     HashMap<Integer, T> temp = new HashMap<Integer, T>(); 
     for (Integer i = 0; i < 81; i++) { 
      Integer rowNum = (i/3) % 3; 
      Integer block = i/9; 
      Integer delta = (rowNum - block); 
      Integer newIdx = i + (delta * 6); 
      temp.put(i, source.get(newIdx)); 
     } 
     return temp; 
    } 
} 

위해 내장 클래스를 생성해야합니까? 미리 도움을 주셔서 감사합니다.

+0

그 통과 된 논증들로부터 유추되었다. –

답변

3

컴파일러 오류가 충분합니다. 방법의 첫 번째 호출 :. 당신이 명시 적 형식 매개 변수를 주어진대로

this.input_map = MapOperations.<JComponent>rearrengeHashMapIdx(this.input_map); 

(음, 정말 여기 T 어쨌든 당신이 HashMap의 유형에서 유추됩니다 유형을 필요하지 않습니다하는 HashMap<Integer, JComponent> 반환 통과). input_map을 해당 유형으로 만 선언 했으므로 괜찮습니다.

그런 다음 다음 메소드 호출에 인수로 input_map 전달됩니다

this.values_map = MapOperations.<UI_FieldPV>rearrengeHashMapIdx(this.input_map); 

지금, 메소드의 선언에 따라, 메소드의 인수 유형 HashMap<Integer, T>이어야한다. 두 번째 메서드 호출에서 형식 매개 변수 TUI_FieldPV으로 유추됩니다. 따라서 메소드는 HashMap<Integer, UI_FieldPV>을 예상하지만 HashMap<Integer, JComponent>을 전달합니다. 물론 두 메소드가 호환되지 않기 때문에 메소드 호출이 실패합니다.

아마도 두 번째 호출에서 인자로 values_map을 전달하려고했습니다. 따라서이 잘 작동합니다 : 방법에 사용되는 형식 매개 변수 T는 클래스 선언에 사용되는 형식 매개 변수 T 관련이

this.values_map = MapOperations.<UI_FieldPV>rearrengeHashMapIdx(this.values_map); 

하는 것으로, 즉 여기에 어떤 차이를하지 않지만. 그러나 단지 FYI.

+0

아 ... 내 잘못이야. 그 명백한 것을 보지 못했습니다.에' 지금 내가 같은 오류 를 얻을 수'(방법 넣어 (정수, 캡처 # 4의);? 나는'(HashMap의 <정수, UI_FieldPV>) this.rearrengeHashMapIdx (this.values_map) 로 변경 타입 HashMap 는 인수 (Integer, capture # 5-of?)에 적용되지 않습니다.) ' 하지만이 코드 라인에 있습니다 (원래 게시물에 게시 된 메소드에서). 'temp.put (i, source.get (newIdx)); ' UI_FieldPV 클래스는 그런데 JPanel을 확장합니다. – newBee

+0

그래, 왜 그런지 모르겠지만 저장 후 닫고 다시 시작하면 오류가 사라졌습니다 ..... 문제가 해결되었습니다! Ty – newBee

0
난 당신이 의도적으로 "input_map"?

this.values_map = MapOperations.<UI_FieldPV>rearrengeHashMapIdx(this.input_map); 

어쩌면 당신이 뭔가를 필요로 넣어 ¿, 이해가 안

:

일반 메서드의 형식 인수가 필요하지 않습니다
this.values_map = MapOperations.<UI_FieldPV>rearrengeHashMapIdx(this.values_map); 
+0

도와 주셔서 감사합니다! 나는이 어리석은 실수를 보지 못했습니다. 그러나 그것은 단지 문제를 "옮겼다"(두 번째 게시물에 대한 답변 참조) – newBee

관련 문제