2010-09-21 31 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"; 
    } 
}