类中有一个数值类型码,但他并不影响类的行为,以一个新的类替换数值类型码.
常量只是一个数值,并没有类型检验,是bug之源.改为使用类的地址值来替代;
public class Person {
// public static final int O = BloodGroup.O.getCode();
// public static final int A = BloodGroup.A.getCode();
// public static final int B = BloodGroup.B.getCode();;
// public static final int AB = BloodGroup.AB.getCode();;
// private int bloodGroup;
private BloodGroup mBloodGroup;
// public Person(int bloodGroup) {
// mBloodGroup = BloodGroup.code(bloodGroup);
//// this.bloodGroup = bloodGroup;
// }
// public int getBloodGroupCode() {
// return mBloodGroup.getCode();
// }
// public void setBloodGroup(int bloodGroup) {
// mBloodGroup = BloodGroup.code(bloodGroup);
//// this.bloodGroup = bloodGroup;
// }
public BloodGroup getBloodGroup() {
return mBloodGroup;
}
public Person(BloodGroup bloodGroup) {
mBloodGroup = bloodGroup;
}
public void setBloodGroup(BloodGroup bloodGroup) {
mBloodGroup = bloodGroup;
}
}
public class BloodGroup {
public static final BloodGroup O = new BloodGroup(0);
public static final BloodGroup A = new BloodGroup(1);
public static final BloodGroup B = new BloodGroup(2);
public static final BloodGroup AB = new BloodGroup(3);
private static final BloodGroup[] values = {O, A, B, AB};
private final int code;
public BloodGroup(int code) {
this.code = code;
}
private int getCode() {
return code;
}
private static BloodGroup code(int arg) {
return values[arg];
}
public static void main(String[] args) {
// Person person = new Person(Person.A);
Person thePerson = new Person(BloodGroup.A);
// person.getBloodGroupCode();
thePerson.getBloodGroup().getCode();
// person.setBloodGroup(Person.AB);
thePerson.setBloodGroup(BloodGroup.AB);
}
}