首页 文章

无法在集成类中找到匹配的构造函数

提问于
浏览
1

我在内部类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

1 回答

  • 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)
    

相关问题