2010-09-21 45 views
2

下面的代码是不是给我我想要的答案,我不知道问题在哪里? FR是EN的翻译(完全像.properties文件) 我想从FR.java文件读取翻译,如果我想从index.jsp页面访问fr.java或en.java的hello变量。但代码我写的让我从Lang.java抽象类专业用法翻译

String language = "FR"; 

的条件是在.jsp文件 JDK 1.4中给了我这个错误值:错误(23,23):变量lang可能尚未初始化

任何机构都可以提供帮助,代码请求?

文件名Lang.java

package mypackage; 

abstract public class Lang { 
    public String hello= "home page"; 
} 

名EN.java

package mypackage; 

public class EN extends Lang { 
    public String hello = "hello"; 
} 

名FR.java

package mypackage; 

public class FR extends Lang { 
    public String hello = "bonjour"; 
} 

文件名:index.jsp的

<%@ page contentType="text/html;charset=windows-1252"%> 
<%@ page import="mypackage.Lang" %> 
<%@ page import="mypackage.FR" %> 
<%@ page import="mypackage.EN" %> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> 

    <title>language</title> 
    </head> 
    <body> 
    <% 
     String language = "EN"; 
     Lang lang; 
     if (language.equals("EN")){ 
     lang = new EN(); 
     } 
     else if (language.equals("FR")){ 
     lang = new FR(); 
     } 
    %> 
    <% 
     out.print(lang.hello); 
    %> 
    </body> 
</html> 
+0

如果lanuage = “EN” 的输出应为 “你好”。否则,如果如果lanuage =“FR”,输出应该是“bonjour”。 – ammar 2010-09-21 12:02:16

回答

0

如果language不等于ENFR那么Lang lang将不会被初始化。在if之前将其明确设置为new EN()

1
<% 
     String language = "EN"; 
     Lang lang; 
     if (language.equals("EN")){ 
     lang = new EN(); 
     } 
     else if (language.equals("FR")){ 
     lang = new FR(); 
     } 
    %> 

这可以使您需要初始化它放在语言保持未初始化的情况下

Lang lang = null;//or any default value 

并初始化局部变量必须放

我不在这里你明白这个条件的重要性,你将"EN"分配给语言,那么条件的需要是什么?

0

设置LANG变量的缺省值:

Lang lang = new EN(); 
if (language.equals("EN")){ 
    lang = new EN(); 
} 
else if (language.equals("FR")){ 
    lang = new FR(); 
} 
1

变化情况如下:

if (language.equals("FR")){ 
    lang = new FR(); 
} 
// add more languages here 
// example: 
// else if (language.equals("DE")) { 
//  lang = new DE(); 
// } 
else { 
    lang = new EN(); 
} 
1

您的代码不符合情况language迎合既不是“EN”,也不是“ FR”。选择一个默认的语言,以便在lang变量总是初始化:

Lang lang; 
if (language.equals("EN")){ 
    lang = new EN(); 
} 
else // default case 
    lang = new FR(); 
} 

此外,而不是宣布一个属性为每个需要被翻译的字符串(如String home)考虑宣布,将采取一个“密钥的方法“作为参数,并返回该键的相应翻译。例如,在你的JSP可以使用这样的事情:

out.print(lang.getString("home")); 

然后让你的所有Lang子类每个键返回正确的,翻译的价值。您可能也想看看ResourceBundles

+0

我想从index.jsp页面到达fr.java或en.java的hello变量。但是我写的代码给了我来自Lang.java的价值。 – ammar 2010-09-21 12:11:54

+0

您发布的代码访问的是“home”变量,而不是“hello”变量。 'home'变量只能在Lang.java中定义,而不是在EN.java或FR.java中定义。 – Grodriguez 2010-09-21 12:14:14

+0

抱歉的男人,这是我的错误,我编辑的代码。请再次检查。 – ammar 2010-09-21 12:20:35

0

如果您想打印hello变量,请在抽象的Lang类中声明该变量并在具体的类中初始化该变量。

package mypackage; 

abstract public class Lang { 
    public String hello= "home page"; 
} 

文件名EN.java

package mypackage; 

public class EN extends Lang { 
    { 
     hello = "hello"; 
    } 
} 

文件名FR.java

package mypackage; 

public class FR extends Lang { 
    { 
     hello = "bonjour"; 
    } 
}