2017-11-20 29 views
1

내부 클래스 집합이 외부 추상 포함 클래스의 유일한 구현 (하위 클래스) 인 경우 클래스를 인스턴스화하는 방법은 무엇입니까? 환언Kotlin의 추상 수퍼 클래스 내의 내부 클래스?

abstract class A { 
    inner class A1 : A() 
    inner class A2 : A() 
} 

, A1 또는 A2의 인스턴스를 생성하는 문법은 무엇인가? 편집

: 클래스 A의 신체 외부 ...

답변

3

이 찾고 계십니까? 내부 클래스는 외부에 ponters를 보유하고 있기 때문에,

abstract class A { 
    inner class A1 : A() 
    inner class A2 : A() 
} 
fun doSome() { // Error 
    val a1 = A1() 
    val a2 = A2() 
} 

이 코 틀린 및 Java 모두에서 사용할 수 없습니다 :

abstract class A { 
    fun doSome() { // OK 
     val a1 = A1() 
     val a2 = A2() 
    } 
    inner class A1 : A() 
    inner class A2 : A() 
} 

나는 당신이 아마처럼 외부 A1/A2의 인스턴스를 구축 할 생각 수업. A1/A2A 외부에 구성하려면 inner 수정자를 제거하기 만하면됩니다. 당신이 말한 이후

abstract class A { 
    class A1 : A() 
    class A2 : A() 
} 

fun doSome() { // OK again 
    val a1 = A.A1() 
    val a2 = A.A2() 
} 

또한, 또한,

내부 클래스의 집합 당신은 abstract를 대체 할 수있는 자신의 외부 추상적 포함하는 클래스

의 유일한 구현 (서브 클래스)가되어 있어요 수정 자 : sealed. 이것은 코 틀린이 exhautiveness 체크를하는데 도움이 될 when 표현입니다.

+0

네 말이 맞아. 나는 ** **의 바깥쪽에 ** 말 했어야했다. [여기에서 내가 해결하려고하는 특정 사용 사례] (https://stackoverflow.com/questions/47361279)는 봉인 된 클래스였습니다. A는 실제로 준 인터페이스이며 A1과 A2는 내가 제어하지 않는 박스형 외국 클래스입니다. 아이디어를 얻었다면 거기에 대답하고 어쩌면 대답 할 수 있겠습니까? 감사. – sirksel

+0

외부 클래스의 인스턴스로 내부 클래스를 생성하면됨을 언급하십시오. 어쩌면 내부 클래스의 인스턴스를 반환하는 외부 클래스에 함수를 작성해야합니다. – ice1000