2013-07-24 5 views
2

나는 함수 내부를 두 번 중괄호와 HashMap 인라인 만드는거야 :이중 중괄호 초기화의 매개 변수는 무엇입니까?

public void myFunction(String key, String value) { 
    myOtherFunction(
     new JSONSerializer().serialize(
      new HashMap<String , String>() {{ 
       put("key", key); 
       put("value", value.); 
      }} 
     ) 
    ); 
} 

을 나는 이러한 오류 메시지가 표시됨 : 초기화 된 Object 이중 중괄호로

myClass.java:173: error: local variable key is accessed from within inner class; needs to be declared final 
         put("key", key); 
           ^
myClass.java:174: error: local variable value is accessed from within inner class; needs to be declared final 
         put("value", value); 
            ^
2 errors 

방법은 메소드 매개 변수를 삽입 할 수 있습니다 ?

+0

메서드 내부 메서드를 정의하려고합니까? – Smit

+1

@ 그렇게 생각하지 않아요. 그는 인라인으로 객체를 만들고 그 객체의 멤버 함수를 호출하는 함수를 호출하고 있습니다. – luk2302

+0

jQuery가 나를 망쳐 놓았습니다. ;) must.put.everything ... INLINE! –

답변

3

final로 매개 변수를 선언 : 또한

public void myFunction(final String key, final String value) 

, 당신은 Efficiency of Java "Double Brace Initialization"?를 살펴 할 수 있습니다

+0

빙고. 천재. 난 더 많은 오류를 준 초기화 내부에서 그것을 시도했다. 그것들을 매개 변수로 생각하지 않았습니다. 고마워! –

1
컴파일러는 내부 클래스에서 비 최종 로컬 변수를 사용하는 경우, 불평이 함께 해결됩니다

:

public void myFunction(final String key, final String value) { 
    myOtherFunction(
     new JSONSerializer().serialize(
      new HashMap<String , String>() {{ 
       put("key", key); 
       put ("value", value.); 
      }} 
     ) 
    ); 
}