2010-03-28 58 views
0

我需要創建接口MultiLingual,它允許以不同的語言顯示對象的數據(不是數據本身,而是像「作者」,「標題」等介紹)。使用Java接口

打印的數據是這樣的:

3 grudnia 1998 

10th of June 1924 

Autor: Tolkien 
Tytul: LoTR 
Wydawnictwo: Amazon 2010 

Author: Mitch Albom 
Title: Tuesdays with Morrie 
Publishing House: Time Warner Books 2003 

37 360,45 PLN 

5,850.70 GBP 

3rd of December 1998 

10th of June 1924 

Author: Tolkien 
Title: LoTR 
Publishing House: Amazon 2010 

Author: Mitch Albom 
Title: Tuesdays with Morrie 
Publishing House: Time Warner Books 2003 

37,360.45 GBP 

5,850.70 GBP 

測試代碼如下所示:

public class Main { 

public static void main(String[] args){ 

    MultiLingual gatecrasher[]={ new Data(3,12,1998), 
           new Data(10,6,1924,MultiLingual.ENG), 
           new Book("LoTR", "Tolkien", "Amazon", 2010), 
           new Book("Tuesdays with Morrie", 
             "Mitch Albom", "Time Warner Books",2003, 
             MultiLingual.ENG), 
           new Money(1232895/33.0,MultiLingual.PL), 
           new Money(134566/23.0,MultiLingual.ENG), 
          }; 

    for(int i=0;i < gatecrasher.length;i++) 
    System.out.println(gatecrasher[i]+"\n"); 

    for(int i=0;i < gatecrasher.length;i++) 
    System.out.println(gatecrasher[i].get(MultiLingual.ENG)+"\n"); 

} 
} 

,所以我需要引進常數ENG,PL在多語言界面,以及GET方法(INT語言):

public interface MultiLingual { 

int ENG = 0; 
int PL= 1; 

String get(int lang); 

} 

然後我有班書。問題始於構造函數。其中之一需要以MultiLingual.ENG作爲參數,但如何實現呢?這是正確的方式嗎? :

class Book implements MultiLingual { 

private String title; 
private String publisher; 
private String author; 

public Book(String t, String a, String p, int y, MultiLingual lang){  
} 

或者我應該把這個MultiLingual.ENG當作int變量來處理,它會自動改變接口中的常量嗎?

的書並不需要MultLingual作爲參數,但下面的實現第二個構造函數是有點不對:

public Book(String t, String a, String p, int y){ 
    Book someBook = new Book(t, a, p, y, MultiLingual m); 
} 

我可以只發送INT米處的多語種米,但我將有語言,如果沒有控制設置爲PL或ENG。

終於搞定了()的方法Boook,但我認爲至少這應該做工精細:

public String get(int lang){ 

    String data; 
    if (lang == ENG){ 
     data = "Author: "+this.author+"\n"+ 
       "Title: "+this.title+"\n"+ 
       "Publisher: "+this.publisher+"\n"; 
    } 
    else { 
     data = "Autor: "+this.author+"\n"+ 
       "Tytul: "+this.title+"\n"+ 
       "Wydawca: "+this.publisher+"\n";    
    } 

    return data; 
} 

@Override 
public String toString(){ 
    return ""; 
} 

} 

回答

1

在您的界面中,代表語言的整數應該是靜態的,您不希望在代碼運行時不小心開始重新渲染它們。然後讓你的書課程保持它的語言的整數。

Book someBook = new Book(t,a,p,y,MultiLingual m);將不起作用MultiLingual是一個接口,它不是任何可以通過的實例。

它需要是一個int。這將會像MultiLingual.ENG或.PL

+0

謝謝,現在我得到它 – 2010-03-28 22:35:12

2

你可能會得到更好的使用enum來表示不同的語言

public interface MultiLingual { 

    enum Language { ENG, PL } 

    String get(Language lang); 

} 

您的Book類的構造函數可以採用MultiLingual.Language的實例

public Book(String t, String a, String p, int y, MultiLingual.Language lang) {  
} 
+1

除了語言的枚舉之外,您應該使用Locale類來完成此目的,以表示語言。正如許多圖書館已經理解語言環境。 – Dishayloo 2010-03-28 20:21:48

1

您是否考慮使用ResourceBundle?這意味着,您可以使用屬性文件來定義特定於語言環境的數據,以便稍後添加更多語言環境變得非常簡單。你的數據對象會返回一些關鍵字以供標籤翻譯,這取決於你的應用程序,這個人可以通過ResourceBundle解析正確的標籤。

+0

+1 - 這就是ResourceBundles的用途。 – duffymo 2010-03-28 20:25:34