[英]Java define class members by a final array
我有一個數組,其中包含一些在程序中使用的定義:
final String[] names = new String[]{"familyNames", "givenNames", "middleNames", "nickNames", "additionalNames", ..., ..., ..., ...}; // Lots of definitions
現在,我需要使用以下定義創建一個新類:
public class Person {
final private String id;
final private String familyNames;
final private String givenNames;
final private String middleNames;
final private String nickNames;
final private String additionalNames;
...
...
...
...
... // Very long list
}
是否可以通過該數組定義此類? 就像是:
public class Person {
final private String id;
final private .... names...
public int compareTo(...) {...}
}
此Person
類應支持按多個字段排序,例如,首先按給定名稱,然后按姓氏等。
為了避免列出一長串的類成員變量,可以使用此處提到的屬性映射:
Map<String,String> attributesMap = new HashMap<String,String>();
應該使用“ familyNames”,“ givenNames”,“ middleNames”,“ nickNames”,“ additionalNames”等作為鍵。
您可以通過采用靜態工廠方法中的attributesMap在Person
類中定義它。
public class Person {
final private String id;
final private Name name;
...
public static Person fromAttributesMap(Map<String, String> attributesMap) {
Person person = new Person();
person.id = attributesMap.get("id");
...
}
}
但是,請務必將相關屬性放在自己的類中。 例如 你能俱樂部familyName
, givenName
, nickName
等的Name
類:
class Name {
final private String familyName;
final private String givenName;
final private String middleName;
}
我對地圖方法並不完全同意。 實際上,周圍有一種代碼氣味-稱為“原始痴迷”
您還可以按名稱對List<Person>
進行排序:
public static Comparator<Person> FamilyNameComparator
= new Comparator<Person>() {
public int compare(Person person1, Person person2) {
//ascending order
return person1.getFamilyName().compareTo(person2.getFamilyName());
}
};
然后調用:
Arrays.sort(persons, Person.FamilyNameComparator);
您還可以按多個字段排序。 看看關於SO的這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.