Java 如何用反射实例化内部类?
我想得到一个嵌套类的构造函数,这样我就可以实例化它了。我希望它是一个内部类,这样我就可以从它的外部类访问变量 下面的代码抛出了一个NoSuchMethodException,并添加了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() {
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+代表非常不安全,所以我改变了它@反斜杠