2014-09-25 3 views
0

나는 중급 개발자이며 Java 추상 클래스의 이론에 대해 잘 알고 있으며 하위 클래스가 특정 생성자 매개 변수를 설정하도록 강제 생성자를 가질 수있는 방법과 추상 클래스 자체를 인스턴스화 할 수없는 방법에 대해 잘 알고 있습니다. 그러나 회사의 테스트 프레임 워크에서 일부 리팩토링 된 코드를 살펴보면 약간 당황 스럽습니다. 우리는 추상 클래스를 인스턴스화 할 수 없기 때문에자바 추상 ​​클래스 생성자 및 새 키워드

public class DbWrapper extends AbstractDB { 

    @Override 
    public void assertColumnValueNotNull(final String schema, final String table, final String columnName, final String whereClause) { 

     new WaitForTestOutcomeThenAssert(this.assertionTemporalTolerance) { 

      @Override 
      public boolean checkCondition() { 
       return getColumnValue(schema, table, columnName, whereClause) != null; 
      } 
     }.waitForConditionThenAssert(); 
    } 
} 

가, 누군가가 작성되는 것을 일어나고 정확히 무엇을 나에게 설명해주십시오 수 있습니다

이 추상 클래스

public abstract class WaitForTestOutcomeThenAssert { 

    private long maxWait; 

    public WaitForTestOutcomeThenAssert(long maxWait) { 
     this.maxWait = maxWait; 
    } 

    public void waitForConditionThenAssert() { 
    ... 
    ... 
    } 

    protected abstract boolean checkCondition(); 
} 

이 클래스에서 참조됩니다 우리가 키워드를 추상 클래스 생성자 앞에서 사용할 때?

+0

[익명 클래스] (http://www.docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm)입니다. 기본적으로 클래스는 이름없이 인라인으로 선언되었습니다. – clcto

+0

[Java에서 익명 (내부) 클래스는 어떻게 사용됩니까?] (http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java) –

+0

이 http를 참조하십시오. : //docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#syntax-of-anonymous-classes –

답변

1

anonymous classes을 사용해보십시오. 여기에는 추상 클래스 WaitForTestOutcomeThenAssert을 확장하고 checkCondition 메서드를 재정의하는 익명 클래스 선언이 있습니다.

1

이 추상 클래스 WaitForTestOutcomeThenAssert를 확장 익명 클래스는

new WaitForTestOutcomeThenAssert(this.assertionTemporalTolerance) { 

     @Override 
     public boolean checkCondition() { 
      return getColumnValue(schema, table, columnName, whereClause) != null; 
     } 
    } 

없습니다. 즉, "WaitForTestOutcomeThenAssert"를 서브 클래 싱하고이를 인스턴스화한다고 쓰면됩니다.

1

이것은 익명 클래스입니다. 추상 클래스 또는 인터페이스을 명시 적으로 쓰지 않아도 바로 가기입니다.