Как использовать enum в параметризованном конструкторе? - PullRequest
5 голосов
/ 06 февраля 2012

У меня есть задание, которое просит меня создать типы перечисления.Мой вопрос, после того, как я инициализирую их, как мне привести их в конструкторы по умолчанию и параметризованные?Я попробовал следующее, но это не работает ... какие-нибудь идеи?Спасибо

package magazine;
import paperPublication.PaperPublication;


public class Magazine extends PaperPublication {

    private enum paperQuality {LOW, NORMAL, HIGH};
    private enum issuingFrequency {WEEKLY, MONTHLY, YEARLY};

    public Magazine() {
        paperQuality = null;   //doesn't work
        issuingFrequency = null;    //doesn't work
    }

    public Magazine (double price, int numberOfPages, enum paperQuality  //doesn't work, enum issuingFrequency  //doesn't work) {

    }
}

Ответы [ 7 ]

6 голосов
/ 06 февраля 2012

Это определение типа:

private enum paperQuality ...

Но на самом деле у вас нет объявленного поля этого типа. Попробуйте что-то вроде этого:

private enum PaperQuality {...};
private PaperQuality paperQuality;

Первая строка определяет перечисление PaperQuality, определяя различные значения, которые может содержать любой PaperQuality. Вторая строка создает приватное поле этого типа с именем paperQuality. Конструктор может выглядеть так:

public Magazine (double price, int numberOfPages, PaperQuality paperQuality) {
    ...
    this.paperQuality = paperQuality;
}
4 голосов
/ 06 февраля 2012

Вы объявили тип, но не экземпляр. Тебе захочется ...

        public enum PaperQuality {LOW, NORMAL, HIGH};
        public enum IssuingFrequency {WEEKLY, MONTHLY, YEARLY};

        PaperQuality paperQuality;
        IssuingFrequency issuingFrequency;

        public Magazine() {
            paperQuality = null; 
            issuingFrequency = null; 
        }

        public Magazine (double price, int numberOfPages, PaperQuality paperQuality){
          //logic here
        }

Я предлагаю вам прочитать учебник по Java перечислениям.

1 голос
/ 06 февраля 2012

enum ключевое слово похоже на class ключевое слово: оно определяет тип, а не переменную.

Ваш код похож на следующее:

public class Magazine extends PaperPublication {

   private class paperQuality { /* something */ }; // note class instead of enum
   private class issuingFrequency { /* something */ };

   public Magazine() {
       paperQuality = null;   //doesn't work -- beacuse paperQuality is a class
       paperQuality a; // does work because class name is suitable for variable definition
       a = null; // you can assign null to class variables
0 голосов
/ 23 августа 2018
private enum paperQuality {LOW, NORMAL, HIGH};
private enum issuingFrequency {WEEKLY, MONTHLY, YEARLY};

Сначала создайте переменную для типа enum.

paperQuality paperqual;
issuingFrequency issuingfre;

тогда вы можете использовать эти переменные перечисления для присвоения значений

public Magazine() {
    paperqual= null;  
    issuingfre= null;   
}

public Magazine (paperQuality pq,issuingFrequency isq) {
   paperqual = pq;
   issuingfre = isq;
}
0 голосов
/ 31 августа 2017

Например, вы можете создать enum в теле класса

enum Sex {
    MALE,
    FEMALE
}

Также вы можете создать отдельный класс. Затем объявите переменную с типом enum и в скобках конструктора укажите созданный вами тип

private Sex enSex;
private String personName;
private int personAge;
private double personWeight;

public Person(String name, int age, double weight, Sex enSex) {
    this.personName = name;
    this.personAge = age;
    this.personWeight = weight;
    this.enSex = enSex;
}
0 голосов
/ 06 февраля 2012

enum не тип данных, он больше похож на ключевое слово "class". Типы данных в вашем примере: paperQuality и IssueFrequency. Итак:

public Magazine (double price,
     int numberOfPages,
     paperQuality quality,
     issuingFrequency freq) {

} 
0 голосов
/ 06 февраля 2012

Объявите переменную перечислимого типа:

private paperQuality quality;

(enum paperQuality { ... } просто определяет тип перечисления, но не создает переменную!).

Также нельзя присвоить null перечисляемому типу, это должно быть одно из перечислимых значений (т. Е. LOW).

...