2013-06-26 3 views
0

мне нужно создать класс с 2 отдельными полями, каждое из них должно лежать в определенных наборах, но комбинация из них не определяется, другими словами:Перечисления использование в Java

Я класс Урок может быть любой продолжительности {30,40,45, 50} и быть {Математика, литература, физика, биология}

Я мог бы сделать это как то

public enum Lesson { 

    shortMath(30,Maths), shortLiterature(30,Literature)...etc 

} 

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

+1

ли это на самом деле должен быть 'enum' по какой-то причине? На самом деле это не то, для чего используются 'enum'. Вы просто хотите класс, который содержит продолжительность и предмет? –

+0

Да, я хочу класс, который содержит продолжительность и тему, но эти поля должны иметь определенные значения (не разрешено 20 минут!) – tania

+0

«Мне нужно создать класс с двумя частными полями, каждый из которых должен лежать в определенных наборах «Это и есть цель перечислений. –

ответ

7

Что случилось с двумя переписками?

public class MyClass { 
private final Duration duration; 
private final Course course; 
} 

public enum Duration { 
THIRTY, 
FOURTY, 
FOURTYFIVE, 
FIFTY 
} 

public enum Course { 
MATH, 
LITERATURE, 
PHYSICS, 
BIOLOGY 
} 
+0

Я просто подумал, что могут быть какие-то более короткие решения :) – tania

+1

@tania Я не знаю, можете ли вы стать короче и по-прежнему соответствовать вашим требованиям. Это действительно похоже на соответствующий способ сделать это, если вы хотите «ограничить значения», как вы описали. Вы также можете подумать об объявлении этих перечислений в «MyClass», если это имеет смысл в контексте вашей программы. – arshajii

+0

хорошо, спасибо! :) – tania

0

Согласен с @Jeroen.

Хотя, если вы хотите иметь только один Enum, вы можете сделать что-то вроде этого:

public class MyClass{ 
    private Lesson lesson; 
} 

private Enum lesson { 

// All the possible combinations you can write. 

    shortLiterature (40, "Literature"), 
    shortMath (30,"Math"), 

    private final String name; 
    private final int number; 
    private final String resultString = name + number; 

    private Modes(int passedNumber, String passedName) { 
     number = passedNumber; 
     name = passedName; 
    } 

    public String toString(){ 
     return resultString; 
    } 

} 
+0

Добавление комментария при downvoting было бы заметно! – PVR

0

Что можно сказать о следующем:

public enum Lesson { 

    MATHS_30("Maths", 30), 
    MATHS_40("Maths", 40), 
    MATHS_45("Maths", 45), 
    MATHS_50("Maths", 50), 
    LITERATURE_30("Literature", 30), 
    LITERATURE_40("Literature", 40), 
    LITERATURE_45("Literature", 45), 
    LITERATURE_50("Literature", 50),  
    // Another combinations 
    ; 

    private final String subject; 
    private final int duration; 

    Lesson(String subject, int duration) { 
     this.subject = subject; 
     this.duration = duration; 
    } 

    public String getSubject() { 
     return subject; 
    } 

    public int getDuration() { 
     return duration; 
    } 

}