2015-09-01 2 views
1

определяет конструктор в внутренном класе, но я получаю Could not find matching constructor for: C$Feature(java.lang.String), вот мой код:Не удался найти соответствующий конструктор в интегрированном классе

class C { 
    class Feature { 
     Feature(String ext) { 
      this.ext = ext 
     } 
     String ext 
    } 
} 

class C2 extends C { 
    def m() { 
     new Feature("smth") 
    } 
} 

class RoTry { 
    static void main(String[] args) { 
     new C2().m() 
    } 
} 

обновления

моего заводной версия

------------------------------------------------------------ 
Gradle 2.3 
------------------------------------------------------------ 

Build time: 2015-02-16 05:09:33 UTC 
Build number: none 
Revision:  586be72bf6e3df1ee7676d1f2a3afd9157341274 

Groovy:  2.3.9 
Ant:   Apache Ant(TM) version 1.9.3 compiled on December 23 2013 
JVM:   1.8.0_05 (Oracle Corporation 25.5-b02) 
OS:   Linux 3.13.0-24-generic amd64 
+0

Вы, вероятно, не может сделать Feature без экземпляра A. Попробуйте поместить это в свой метод 'm' вместо:' new C.Feature (новый C(), «smth») ' – Zarwan

+1

Я пробовал ваш код, если вы удаляете синтаксические ошибки, которые он компилирует ... – Ilario

+1

, который должен быть' new C.Feature ("smth") ' – cfrick

ответ

1

Неединичные внутренние классы требуют формального параметра в конструкторе: см. Do default constructors for private inner classes have a formal parameter?.

Таким образом, внутри метода m() вы должны использовать new Feature(this, 'smth'):

class C { 
    class Feature { 
     String ext 

     Feature(String ext) { 
      this.ext = ext 
     } 

     String toString() { 
      ext 
     }   
    } 

    def n() { 
     new Feature('nnnn') 
    } 
} 

class C2 extends C { 
    def m() { 
     new Feature(this, 'mmmm') 
    } 
} 

def c = new C() 
println c.n() 

def c2 = new C2() 
println c2.m() 

с отражением, вы можете увидеть его:

C.Feature.class.getDeclaredConstructors().each { constructor -> 
    println constructor 
} 

-- 

public C$Feature(C,java.lang.String) 
+0

Это лучший способ найти то, что я нахожу – nwaicaethi

Смежные вопросы