在有关此主题的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);
}
}
答案 0 :(得分:1)
除非您将static
视为PersonDataHandler
类,否则将为Util
成员创建另一个类也没有意义。
除此之外,如果您的静态成员是public
,那么它是否在Person
类之内还是其他地方都没关系。
答案 1 :(得分:-1)
至少从封装的角度来看,第二个变体更好。 最好删除“静态”修饰符,以使此类不是全局的。
第一个变体非常奇怪,因为您可以这样做:
personA.addPerson(personB);
这违反了单一责任原则。 (DAO和POJO同时) 这还会导致奇怪的继承结构。