我在内部类Feature中定义了一个构造函数,但我得到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 :(得分: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)