Java类实例保存在实例体内

时间:2018-06-27 14:50:31

标签: java syntax instance instance-variables

在有关此主题的oracle和java文章中,我找不到这种结构的任何“错误”或可能“有问题的”。

我指的是一个类,它充当数据的存储实例,并且还通过静态getter / setter和迭代器将自身存储在同一类中。

如下: (将下面的示例1与下面的示例2进行比较-“更好/更安全”)?

示例1:

public class Person {

    /**
     * The data stored.
     */
    private Integer age;
    private Object data;
    private String name;

    /**
     * The data handled (IN THE SAME CLASS)
     */
    private static List<Person> persons = new ArrayList<>();

    public static void addPerson(Person p){
        persons.add(p);
    }

    public static Person getPerson(int index){
        return persons.get(index);
    }
}

对: 示例2 :(分为2个类)

public class Person {

    /**
     * The data stored.
     */
    private Integer age;
    private Object data;
    private String name;
}

public class PersonDataHandler {

    /**
     * The data handled (NOT THE SAME CLASS)
     */
    private static List<Person> persons = new ArrayList<>();

    public static void addPerson(Person p){
        persons.add(p);
    }

    public static Person getPerson(int index){
        return persons.get(index);
    }
}

2 个答案:

答案 0 :(得分:1)

除非您将static视为PersonDataHandler类,否则将为Util成员创建另一个类也没有意义。

除此之外,如果您的静态成员是public,那么它是否在Person类之内还是其他地方都没关系。

答案 1 :(得分:-1)

至少从封装的角度来看,第二个变体更好。 最好删除“静态”修饰符,以使此类不是全局的。

第一个变体非常奇怪,因为您可以这样做:

personA.addPerson(personB);

这违反了单一责任原则。 (DAO和POJO同时) 这还会导致奇怪的继承结构。