簡體   English   中英

Java通過最終數組定義類成員

[英]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");
      ...
  }
}

但是,請務必將相關屬性放在自己的類中。 例如 你能俱樂部familyNamegivenNamenickName等的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM