2010-03-28 247 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