我不知道如何描述我的問題,所以我會給你一個快速解釋。使用抽象方法而不是字段
我想製作一個程序,用戶可以選擇一種語言,然後以該語言打印文本。目前,我想到的是這樣的:
// Super | class Language;
// Sub | --- class German;
// Sub | --- class English;
if(UserChoseEnglish())
language = new English();
else
language = new German();
英語和德語具有相同的公共靜態最終字段,使我能夠使用language.anyMethod();
由用戶的選擇給出。 AFAIK你不能重寫字段,所以我在考慮把抽象方法(在超類)中的所有字段打包,只返回值並覆蓋這些值。
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!";
}
}
這被認爲是不好的做法?我應該重寫getter-methods嗎?還是我錯過了一些我不知道的東西?如果你想幫忙,會很好。
(我目前只是在玩Java,並認爲選擇語言會很有趣,如果你有經驗可以共享(圖書館,房地產......),請隨時這樣做:))
看看[本教程](http://docs.oracle.com/javase/tutorial/i18n/),具體地約使用'ResourceBundle'部件。 – azurefrog 2014-09-18 21:01:07
而不是使用很多方法,你可以考慮使用一個像'general.save'這樣的鍵的映射,值是字符串的本地化。這樣你就避免了這種方法,你可以將你的條目分組。你也可以考慮使用'Language'接口中定義的常量作爲鍵。同一個接口可以定義一個像String getText(final String key)這樣的方法;'這將返回所用語言的本地化文本。除了語言類和這個接口,你還需要一些類似於'LanguageHandler'的類來提供'Language'實例的實例。 – Tom 2014-09-18 21:19:26