Java内部私有类中的getter setter

时间:2018-08-31 10:39:46

标签: java getter-setter

我想在Java中创建与以下json相对应的bean

{
    "name": "",
    "id": "",
    "dept": {
        "deptId": "",
        "deptName": "",
        "course": {
            "courseId": "",
        }
    }
}

我的想法是创建父类并将deptcourse保留为内部私有类,然后让getters setter获取或设置数据并形成父bean。但是我收到错误消息“改变公众的知名度”

如何访问内部私有类的私有字段来获取和设置数据?

4 个答案:

答案 0 :(得分:2)

尝试这种方式将起作用

public class firstClass{

    private String name;
    private String id;
    Department dept;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Department getDept() {
        return dept;
    }
    public void setDept(Department dept) {
        this.dept = dept;
    }


}

class Department{
    private int departId;
    private String deptName;
    Course course;
    public int getDepartId() {
        return departId;
    }
    public void setDepartId(int departId) {
        this.departId = departId;
    }
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    public Course getCourse() {
        return course;
    }
    public void setCourse(Course course) {
        this.course = course;
    }

}


class Course{
    private int courseId;

    public int getCourseId() {
        return courseId;
    }

    public void setCourseId(int courseId) {
        this.courseId = courseId;
    }

}

答案 1 :(得分:0)

您无法访问私有字段。为什么不为内部类私有字段创建getter和setter?

而且,也许您应该考虑使用gson库。

答案 2 :(得分:0)

您至少必须使用您的私有(静态)嵌套私有类DeptImpl和SourceImpl来使之成为嵌套的公共接口,例如Dept和Course。

public class X {
    public interface Dept { ... }
    private static class DeptImpl extends Dept { ... }
    public Dept getDept() { ... }

    public Dept createDept(...) {
        DeptImpl dept = new DeptImpl(...); ...
        return dept;
    }

也许您需要提供一个工厂方法createDept。

在某些情况下,实现类可以是匿名new Dept() { ... }

答案 3 :(得分:0)

您可以对不可变对象使用Builder设计模式:

public class Class {

private final String name;
private final int id;
private final Department dept;

private Class(ClassBuilder classBuilder){
    this.name = classBuilder.getName();
    this.id = classBuilder.getId();
    this.dept = classBuilder.getDept();
}

public String getName() {
    return name;
}

public int getId() {
    return id;
}

public Department getDept() {
    return dept;
}

private static class Department{

    private final int deptId;
    private final String deptName;
    private final Course course;

    private Department(DepartmentBuilder departmentBuilder){
        this.deptId = departmentBuilder.getDeptId();
        this.deptName = departmentBuilder.getDeptName();
        this.course = departmentBuilder.getCourse();
    }

    public int getDeptId() {
        return deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public Course getCourse() {
        return course;
    }

    private static class Course{

        private final int courseId;

        private Course(CourseBuilder courseBuilder){
            this.courseId = courseBuilder.getCourseId();
        }

        public int getCourseId() {
            return courseId;
        }
    }
}

public static class ClassBuilder{

    private final String name;
    private final int id;
    private final Department dept;

    public ClassBuilder(String name, int id, Department dept){
        this.name = name;
        this.id = id;
        this.dept = dept;
    }

    public Department getDept() {
        return dept;
    }

    public String getName() {
        return name;
    }

    public int getId() {
        return id;
    }

    public Class build(){
        return new Class(this);
    }
}

public static class DepartmentBuilder {

    private final int deptId;
    private final String deptName;
    private final Department.Course course;

    public DepartmentBuilder(int deptId, String deptName, Department.Course course ){
        this.deptId = deptId;
        this.deptName = deptName;
        this.course = course;
    }

    public int getDeptId() {
        return deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public Department.Course getCourse() {
        return course;
    }

    public Department build(){
        return new Department(this);
    }
}

public static class CourseBuilder{

    private final int courseId ;

    public CourseBuilder(int courseId){
        this.courseId = courseId;
    }

    public int getCourseId() {
        return courseId;
    }

    public Department.Course build(){
        return new Department.Course(this);
    }
}

}

public class Sample {

public static void main(String ... strings){

    Class clazz = new Class.ClassBuilder("ClassName", 1, new Class.DepartmentBuilder(1, "departmentName", new Class.CourseBuilder(2).build()).build()).build();

    System.out.println(clazz.getDept());
}

}