2014-04-01 3 views
2

내 코드에 익명 내부 클래스를 만들려면 :내 자바 코드 여기

package com.chapter9.innerclass; 

public class AnonymousInnerClass { 

    private int i = 10; 

    private void f(){ 
     System.out.println("AnonymousInnerClass f()"); 
    } 

    public void h(){ 
     new Object{ 
      void g(){ 
       i++; 
       f(); 
      } 
     }.g(); 
     System.out.println("i = "+i); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     AnonymousInnerClass aic = new AnonymousInnerClass(); 
     aic.h(); 
    } 

} 

당신은 내가 내 시간 안에 새로운 익명의 개체 클래스를 선언 볼 수 있듯이() 함수. main()에서 g() 함수 work.But 코드를 준수하면 다음 메시지가 나타납니다.

스레드 "main"의 예외 java.lang.Error : 컴파일되지 않은 컴파일 문제 : "."토큰에 대한 토큰에 구문 오류 "새로운", 인터페이스 예상 구문 오류,() AnonymousInnerClass

어떻게해야합니까 유형에 대해 정의되지 않는다이 토큰 방법 g를 삭제 하시겠습니까? AnonymousInnerClass를 사용하는 정확한 방법을 알려주십시오.

+0

에서 g()를 액세스 할 수있는 가능성을 잃게되므로주의하시기 바랍니다 : [자바 익명의 내부 클래스 (HTTP를 : // docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) –

답변

5

new Object{

가되어야합니다 : 귀하의 경우 그냥 오타를 가지고 있지만

new Object(){

3

는 일반적으로 컴파일러 즉, 방법 g()이 존재하는지 알 수 없습니다, 당신이 시도하는 경우 다른 곳에서는 g()으로 전화하면 실패합니다. 자바 8 단 하나의 방법은 람다 식을 this article에 따라 기능적인 인터페이스도 쉽게되어있는 인터페이스를 구현하는 것을

interface X { 
    void doSomething(); 
} 

// somewhere else: 
X x = new X(){ 
    void doSomething(){ 
    // implementation 
    } 
} 
// this call now works. 
x.doSomething(); 

참고 :

는 일반적으로 익명의 내부 클래스는 인터페이스를 구현합니다.

1

또한 Object 유형의 참조 변수에 객체를 할당하는 즉시 당신이 읽기 외부