Nie wiem, jak opisać mój problem, więc dam ci szybkie wyjaśnienie.Użyj metod abstrakcyjnych zamiast pól
Chcę zrobić program, w którym użytkownik może wybrać język, a następnie tekst zostanie wydrukowany w tym języku. Obecnie mam na myśli coś takiego:
// Super | class Language;
// Sub | --- class German;
// Sub | --- class English;
if(UserChoseEnglish())
language = new English();
else
language = new German();
angielski i niemiecki mają takie same statyczne pola końcowe publicznych, tak, że jestem w stanie wykorzystać language.anyMethod();
który jest dany przez wybór użytkownika. AFAIK, nie można przesłonić pól, więc zastanawiałem się nad spakowaniem wszystkich pól w abstrakcyjnych metodach (w superklasie), które tylko zwracają wartość i nadpisują te.
public abstract class Language
{
public abstract String thanks();
}
public class English extends Language
{
@Override
public String thanks()
{
return "Thanks!";
}
}
public class German extends Language
{
@Override
public String thanks()
{
return "Danke!";
}
}
Czy uważa się to za złą praktykę? Czy powinienem po prostu przesłonić metody gettera, czy też po prostu tęsknię za czymś, o czym nie wiem? Byłoby miło, gdybyś pomógł.
(Obecnie po prostu bawię się na Jawie i uważam, że wybór języka będzie całkiem przyjemny, jeśli masz doświadczenie w udostępnianiu (biblioteki, właściwości, ...?), Możesz to zrobić) :)
Spójrz na [ten samouczek] (http://docs.oracle.com/javase/tutorial/i18n/), w szczególności części dotyczące korzystania z 'ResourceBundle' . – azurefrog
Zamiast używać wielu metod, można pomyśleć o używaniu mapy z kluczem takim jak "general.save", a wartość jest lokalizacją ciągu. W ten sposób unikasz tych metod i możesz grupować swoje wpisy. Możesz także pomyśleć o użyciu stałych zdefiniowanych w interfejsie 'Język' jako kluczy. Ten sam interfejs może definiować metodę taką jak 'String getText (final String key);', która zwróci zlokalizowany tekst dla używanego języka. Oprócz klas językowych i tego interfejsu potrzebujesz czegoś takiego jak klasa 'LanguageHandler', która udowodniła instancje dostępnych instancji' Language'. – Tom