请在反射API方面帮助我。如果内部类没有“public”修饰符,我就不能实例化它。我有课:
public abstract class AbstractClass {
String str;
public AbstractClass (String str) {
this.str = str;
}
abstract void process(String str);
}
public class Outer {
class Inner extends AbstractClass{
Inner(String str) {
super(str);
}
@Override
void process(String str) {
//doSmth
}
}
}
void fillArray (AbstractClass innerAbstract) {
try {
ArrayList<AbstractClass> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Object outerClazz = Class.forName(innerAbstract.getClass().getEnclosingClass().getName()).newInstance();
Class<?> innerReal = Class.forName(innerAbstract.getClass().getName());
Constructor<?> ctor = innerReal.getConstructor(outerClazz.getClass(), String.class);
AbstractClass resultClass = (AbstractClass) ctor.newInstance(outerClazz, innerReal.getName());
list.add(resultClass);
resultClass.process("STR");
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
NoSuchMethodException | SecurityException | IllegalArgumentException |
InvocationTargetException ex) {
ex.printStackTrace();
}
}
您忘记将构造函数设置为可访问
这应该起作用:
Constructor<?> ctor = innerReal.getConstructor(outerClazz.getClass(), String.class);
ctor.setAccessible(true); // can throw some sort of Exception
AbstractClass resultClass = (AbstractClass) ctor.newInstance(outerClazz, innerReal.getName());
问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:
是否可以从类main中的main方法实例化并获得对Test的访问。
我尝试实例化以下Java代码中定义的内部类: 我得到了这个例外: 我错过了什么?
问题内容: 我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示: 问题是,如果是诸如的内部类,则该方法即使是公共方法也将不起作用,因为它将抛出。 有没有办法动态实例化内部类? 问题答案: 如果它是真正的 内部 类而不是 嵌套 (静态)类,则有一个隐式构造函数参数,它是对外部类实例的引用。在那个阶段您不能使用- 必须获得适当的构造函数。这是一个例子:
访问级别修饰符如何改变内部私有类中成员的行为?我有这个密码 属性是私有的:我可以从Main访问它,但不能从Main外部访问它(因为Inner是私有的) 属性是public的:我仍然可以从Main访问它,但不能从Main外部访问它(因为Inner是private的) 我看不出有什么不同
实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下: 上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1) 在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。 2)在实例内部类中,可以访问外部类的所有成员。 提示:如果有多层嵌套,则内部类可以访问所有外部类的成员。 3)在外部类中不能直接访问内部类的成员,而必