Metody s proměnným počtem argumentů
V javě je možné definovat metodu s proměnným počtem argumentů. Definice vypadá následovně:
int sum(int ... numbers) {
int result = 0;
for (int number : numbers) {
result += number;
}
return result;
}
Enum (výčtové typy)
- Programátorem definovaný konečně-hodnotový datový typ.
- V Javě může mít každá hodnota enumu nějaké své vlastnosti.
- Můžeme přidat i metody.
- Nelze vytvářet nové instance. Tj instance jsou právě naše prvky výčtu.
- Nelze dědit.
- Lze přes ně iterovat (statická metoda values() vrátí všechny prvky enumu).
Definice výčtového typu
public enum Weekday {
//nejprve výčet prvků (máme-li konstruktor s parametry, tak v závorkách je předáme
MONDAY(1, "Monday"),
TUESDAY(2, "Tuesday"),
WEDNESDAY(3, "Wednesday"),
THURSDAY(4, "Thursday"),
FRIDAY(5, "Friday"),
SATURDAY(6, "Saturday"),
SUNDAY(7, "Sunday"); //jsou to konstanty, dle konvencí píšeme velkým
// Pomocné atributy
private int index;
private String description;
// Konstruktor (privátní, funguje jen pro konstatny výše,
// zkuste jej zavoalt sami níže...)
Weekday(int index, String description){
this.index = index;
this.description = description;
}
public int getIndex() {
return index;
}
public String getDescription() {
return description;
}
public boolean isBestDay(){
return this.equals(THURSDAY);
}
// Muzeme definovat staticke metody
public static void tryMe(){
//Weekday weekday = new Weekday(3, "Wednesday"); // ... nepůjde
}
}
Použití
public static void main(String[] args) {
WeekDay day = WeekDay.MONDAY;
switch (day) {
case MONDAY:
System.out.println("I hate mondays.");
break;
.
.
.
case SUNDAY:
System.out.println("Moday tomorrow again!");
break;
}
}
Příklad z minulého semináře vyřešený pomocí výčtových typů si můžete stáhnout zde.
Úkoly
Napište statickou metodu String formatStr(String format, Object... args)
,
která vrátí řetězec, kde budou nahrazeny podřetězce %<cislo>
hodnotou příslušného argumentu. <cislo>
může být libovolné
nezáporné číslo.
Příklad:
formatStr("A: %0; B: %1", 1, 1.6); // ===> "A: 1; B: 1.6"
Napište třídu AnimalFarm
evidující informace o zvířatech na statku. Třída bude mít dvě metody:
add
-- přidá do seznamu zvíře a o něm následující informace: jméno, druh zvířete, pohlaví.list
-- vypíše seznam zvířat ve tvaru:Alík je pes a dělá "haf-haf". Bobík je kačena a dělá "ga-ga". Chubaka je fena a dělá "haf-haf". Donald je kačer a dělá "ga-ga".
Navrhěte vhodné výčtové typy pro reprezentaci zvířat.