首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java接口

使用Java接口
EN

Stack Overflow用户
提问于 2010-03-29 03:33:06
回答 3查看 167关注 0票数 0

我需要创建接口MultiLingual,它允许以不同的语言显示对象的数据(不是数据本身,而是像“作者”,“标题”等的介绍)。

打印的数据如下所示:

代码语言:javascript
复制
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

测试代码如下所示:

代码语言:javascript
复制
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方法(整型语言):

代码语言:javascript
复制
public interface MultiLingual {

int ENG = 0;
int PL= 1;

String get(int lang);

}

然后我还有课本。问题从构造函数开始。其中一个需要将MultiLingual.ENG作为参数,但如何实现呢?这是正确的方式吗?

代码语言:javascript
复制
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当作一个整型变量,它会自动改变接口中的常量?

book的第二个构造函数没有将MultLingual作为参数,但是下面的实现是错误的:

代码语言:javascript
复制
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()方法,但我认为至少这应该可以很好地工作:

代码语言:javascript
复制
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 "";
}

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-29 03:40:27

在你的接口中,表示语言的int应该是静态的,你不想在代码运行时意外地重新设置它们。然后让你的book类为哪种语言保存一个int。

Book someBook = new Book(t,a,p,y,MultiLingual m);不会工作,因为MultiLingual是一个接口,它不是任何可以传入的实例。

它需要是一个int类型。它将类似于MultiLingual.ENG或.PL

票数 1
EN

Stack Overflow用户

发布于 2010-03-29 03:40:13

使用enum来表示不同的语言可能会更好

代码语言:javascript
复制
public interface MultiLingual {

    enum Language { ENG, PL }

    String get(Language lang);

}

然后,Book类的构造函数可以获取MultiLingual.Language的一个实例

代码语言:javascript
复制
public Book(String t, String a, String p, int y, MultiLingual.Language lang) {      
}
票数 2
EN

Stack Overflow用户

发布于 2010-03-29 04:01:53

你有没有考虑过使用ResourceBundle?这意味着,您可以使用属性文件来定义特定于区域设置的数据,这使得在以后添加更多区域设置变得非常容易。您的数据对象将返回一些键以供标签转换,这取决于您的应用程序,然后该人员可以通过ResourceBundle解析正确的标签。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2534206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档