Как объяснить результат этой функции перечисления Java? - PullRequest
1 голос
/ 10 июля 2010

Учитывая

public enum Title {

MR("Mr."), MRS("Mrs."), MS("Ms.");

private final String title;

private Title(String t) {
    title = t;
}

public String format(String last, String first) {
    return title + "" + first + "" + last;
}
}

public static void main(String[] args){
    System.out.println(Title.MR.format("Doe","John"));
}

Кто-нибудь знает, как это объяснить?Имейте в виду, что код не полностью завершен.Это вопрос из книги.Ответ на этот вопрос - мистер Джон Доу.

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 июля 2010

Это перезапись исходного фрагмента с enum на class;он захватывает большинство , что делает оригинальный фрагмент.Я также переписал часть конкатенации строк, используя String.format в учебных целях.

public class Title {

    public static final Title MR = new Title("Mr.");
    public static final Title MRS = new Title("Mrs.");
    public static final Title MS = new Title("Ms.");

    private final String title;
    private Title(String t) { title = t; }

    public String format(String last, String first) {
        return String.format("%s %s %s", title, first, last);
    }

    public static void main(String[] args){
        System.out.println(Title.MR.format("Doe","John"));
        // prints "Mr. John Doe"
    }
}

Обратите внимание на сходство с кодом enum.Но учтите также, что эта версия гораздо более многословна.Важно, чтобы вы знали достаточно Java, чтобы понять, почему эта версия работает так, как она есть.Как только вы это сделаете, понять версию enum просто: enum - это классы в Java.Это не такой «простой» тип, как аналог C / C ++.

Ссылки

Смежные вопросы

На Java и C ++ Разница:

На различное enum использование:

См. Также

  • Effective Java 2nd Edition, глава 6: Перечисления и аннотации
    • Пункт 30: Используйте перечисления вместо intконстанты
    • Элемент 31: Использовать поля экземпляров вместо ординалов
    • Элемент 32: Использовать EnumSet вместо битовых полей
    • Элемент 33: Используйте EnumMap вместо порядкового индексирования

API-ссылки

3 голосов
/ 10 июля 2010

Ну, во-первых, рассмотрим чтение этого , чтобы понять , что означает Enum, как это работает, и , когда , вы должны его использовать.

Теперь, что касается вашего Enum примера, вы объявляете Enum удаленный тип на три возможных значения:MR, MRS и MS.Enum s, как и Class es, может иметь методов и конструкторов .В вашем примере Title имеет конструктор с одним аргументом - который хранит описание Title - и метод, который в основном добавляет описание к указанному имени - метод format.

Итак, когда вы вызываете Title.MR.format("Doe","John")), сначала вы получаете экземпляр MR Title, а затем вы вызываете метод format, который возвращает Mr.John Doe.

Также обратите внимание, что создается только один экземпляр каждого Title, поэтому при вызове Title.MR несколько раз всегда будет возвращаться один и тот же объект.

2 голосов
/ 10 июля 2010

Предположим, вопрос заключается в том, как получается результат, вот исходный код с некоторыми комментариями:

public enum Title { // Declare an enum named Title

// Declare the enumerations with parameters that correspond with the constructor
MR("Mr."), MRS("Mrs."), MS("Ms.");

private final String title; // Declare String attribute (has null value at this point)

private Title(String t) { // enum constructor which accepts a String
    title = t; // Initialize title String with parameter t
}
// format method which accepts last and first Strings and returns a String
public String format(String last, String first) {
    // return is a String constructed from title first and last Strings.
    return title + "" + first + "" + last;
}
}

// Main method which is triggered when the class is run
public static void main(String[] args){
    // Output to console a call to the MR enum of Title with parameters Doe and John
    System.out.println(Title.MR.format("Doe","John"));
}

Надеюсь, что этот код станет понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...