Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用反射实例化内部类?_Java_Android_Reflection_Kotlin_Getconstructor - Fatal编程技术网

Java 如何用反射实例化内部类?

Java 如何用反射实例化内部类?,java,android,reflection,kotlin,getconstructor,Java,Android,Reflection,Kotlin,Getconstructor,我想得到一个嵌套类的构造函数,这样我就可以实例化它了。我希望它是一个内部类,这样我就可以从它的外部类访问变量 下面的代码抛出了一个NoSuchMethodException,并添加了internal前缀: package com.example import android.util.Log class ClassA { var iWantToUseThisFromTheInnerClass = "someValue" fun runThisToStart() {

我想得到一个嵌套类的构造函数,这样我就可以实例化它了。我希望它是一个内部类,这样我就可以从它的外部类访问变量

下面的代码抛出了一个NoSuchMethodException,并添加了
internal
前缀:

package com.example

import android.util.Log

class ClassA {

    var iWantToUseThisFromTheInnerClass = "someValue"

    fun runThisToStart() {
        val classB = ClassB(InnerClassA::class.java)
        classB.doSomething()

    }

    inner class InnerClassA(text: String) {
        init {
            Log.d("InnerClassA", "Constructor invoked " + text)
        }
    }

}

package.com.example
导入java.lang.reflect.InvocationTargetException
B类(私有变量mModelClass:class){
val someText=“无论如何”
有趣的事():T{
试一试{
val constructor=mModelClass.getConstructor(字符串::class.java)
返回构造函数.newInstance(someText)
}catch(e:NoSuchMethodException){//引发此异常
抛出运行时异常(e)
}捕获(e:InvocationTargetException){
抛出运行时异常(e)
}捕获(e:实例化异常){
抛出运行时异常(e)
}捕获(e:IllegalacessException){
抛出运行时异常(e)
}
}
}

谢谢

您还需要在构造函数中包含封闭类(ClassA)实例,因为没有它InnerClassA就无法存在:

class ClassA {

    var iWantToUseThisFromTheInnerClass = "someValue"

    fun runThisToStart() {
        val classB = ClassB(InnerClassA::class.java)
        classB.doSomething(this)

    }

    inner class InnerClassA(text: String) {
        init {
         //   Log.d("InnerClassA", "Constructor invoked " + text)
        }
    }

}

class ClassB<T>(private var mModelClass: Class<T>) {

    val someText = "whatever"

    fun doSomething(enclosingObj : Any):T {
            val constructor = mModelClass.getConstructor(enclosingObj::class.java, String::class.java)
            return constructor.newInstance(enclosingObj, someText)
    }

}
A类{
var iwanttousethis from interclass=“someValue”
有趣的runThisToStart(){
val classB=classB(InnerClassA::class.java)
B类.剂量(本)
}
内部类InnerClassA(文本:字符串){
初始化{
//Log.d(“InnerClassA”,“调用构造函数”+文本)
}
}
}
B类(私有变量mModelClass:class){
val someText=“无论如何”
有趣的事(附:任何):T{
val constructor=mModelClass.getConstructor(enclosuringobj::class.java,String::class.java)
返回构造函数.newInstance(enclosuringObj,someText)
}
}

您还需要在构造函数中包含封闭类(ClassA)实例,因为没有它InnerClassA就无法存在:

class ClassA {

    var iWantToUseThisFromTheInnerClass = "someValue"

    fun runThisToStart() {
        val classB = ClassB(InnerClassA::class.java)
        classB.doSomething(this)

    }

    inner class InnerClassA(text: String) {
        init {
         //   Log.d("InnerClassA", "Constructor invoked " + text)
        }
    }

}

class ClassB<T>(private var mModelClass: Class<T>) {

    val someText = "whatever"

    fun doSomething(enclosingObj : Any):T {
            val constructor = mModelClass.getConstructor(enclosingObj::class.java, String::class.java)
            return constructor.newInstance(enclosingObj, someText)
    }

}
A类{
var iwanttousethis from interclass=“someValue”
有趣的runThisToStart(){
val classB=classB(InnerClassA::class.java)
B类.剂量(本)
}
内部类InnerClassA(文本:字符串){
初始化{
//Log.d(“InnerClassA”,“调用构造函数”+文本)
}
}
}
B类(私有变量mModelClass:class){
val someText=“无论如何”
有趣的事(附:任何):T{
val constructor=mModelClass.getConstructor(enclosuringobj::class.java,String::class.java)
返回构造函数.newInstance(enclosuringObj,someText)
}
}

对于2k+rep,您应该知道代码应该通过代码工具以文本形式发布。请相应地编辑问题。完成。你的评论让我对我的2k+代表非常不安全,所以我改变了它@使用2k+rep反斜杠您应该知道代码应该通过代码工具以文本形式发布。请相应地编辑问题。完成。你的评论让我对我的2k+代表非常不安全,所以我改变了它@反斜杠