首页 > 解决方案 > 如何使用 Java 反射在 Java 中创建嵌套静态类的新对象

问题描述

假设我有一个带有以下代码的“Person.java”:

//Person.java
public class Person{

    protected Person(String x, String y){
        .....
    } 

    private static class Teacher{

        private Teacher(String x, String y){
            .....
        }

    }
}

我想在“Teacher_A.java”中创建一个静态嵌套类教师的对象

//Teacher_A.java
import Person

public class Teacher_A {
    public static void main(String[] args) {
        //new Teacher Object here ....
    }
}

如何使用 Java 反射做到这一点?

标签: javaoopconstructorinstance

解决方案


  1. 您无法访问Teacher课程,Teacher_A因为您已定义如下:

    私人静态班级教师

嵌套类的行为类似于仅类的成员,因此如果您的嵌套类是私有的,那么您可以在类外访问它。

有关更多详细信息,请参阅嵌套类

  1. 假设您将访问说明符从私有更改为包或公共仍然无法创建Teacher类的对象,因为您已将构造函数设为私有:

    私人教师(字符串 x,字符串 y)

JLS 6.6.1。确定可访问性

如果成员或构造函数被声明为私有,则当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内时,才允许访问。

但无论如何,如果您想运行此更改 Access Control 1 ex:

package sample;
import sample.Person.Teacher;
public class Teacher_A {
  public static void main(String[] args) {
     //new Teacher Object here ....
      Teacher aa = new Teacher(null,null);
   }
}

package sample;
public class Person{
    protected Person(String x, String y){
           //your code
    } 
    static class Teacher{
          Teacher(String x, String y){
           //your code
          }
    }
}

推荐阅读