簡體   English   中英

使用Java接口

[英]using Java interfaces

我需要創建接口MultiLingual,該接口允許以不同的語言顯示對象的數據(不是數據本身,而是諸如“作者”,“標題”之類的介紹)。

打印的數據如下所示:

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");

}
}

所以我需要在MultiLingual接口中引入常量ENG,PL以及方法get(int language):

public interface MultiLingual {

int ENG = 0;
int PL= 1;

String get(int lang);

}

然后我上課Book。 問題始於構造函數。 其中之一需要采用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 m代替MultiLingual m,但是如果語言設置為PL或ENG,我將無法控制。

最后是Boook的get()方法,但我認為至少這應該可以正常工作:

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 "";
}

}

您最好使用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) {      
}

在界面內部,代表語言的整數應該是靜態的,您不想在代碼運行時意外地重新聲明它們。 然后讓您的書本課程為它的語言指定一個int值。

Book someBook =新書(t,a,p,y,多語言m); 由於MultiLingual是一個接口,因此無法使用,它沒有任何實例可以傳遞。

它必須是一個int。 這將類似於MultiLingual.ENG或.PL

您是否考慮過使用ResourceBundle 這意味着,您可以使用屬性文件來定義特定於語言環境的數據,從而使以后添加更多語言環境變得非常容易。 您的數據對象將返回一些鍵以供標簽轉換,然后根據您的應用程序,該人員可以通過ResourceBundle解析正確的標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM