下面的代码没有给我我想要的答案,我不知道问题出在哪里? 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";
}
filename EN.java
package mypackage;
public class EN extends Lang {
public String hello = "hello";
}
filename 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 :(得分: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"
语言是什么需要条件?
答案 1 :(得分: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();
}
答案 2 :(得分:1)
您的代码不符合language
既不是“EN”也不是“FR”的情况。选择默认语言,以便始终初始化lang
变量:
Lang lang;
if (language.equals("EN")){
lang = new EN();
}
else // default case
lang = new FR();
}
此外,不要为每个需要翻译的字符串声明一个属性(例如String home
),而是考虑声明一个将“key”作为参数的方法,并返回该键的相应翻译。例如,在您的JSP中,您可以使用以下内容:
out.print(lang.getString("home"));
然后让所有Lang
子类为每个键返回正确的翻译值。
您可能还想查看ResourceBundles。
答案 3 :(得分:0)
如果language
不等于EN
或FR
,则Lang lang
将不会被初始化。在new EN()
之前将其明确设置为if
。
答案 4 :(得分:0)
设置lang变量的默认值:
Lang lang = new EN();
if (language.equals("EN")){
lang = new EN();
}
else if (language.equals("FR")){
lang = new FR();
}
答案 5 :(得分:0)
如果要打印hello变量,请在抽象Lang类中声明该变量并在具体类中初始化。
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
filename EN.java
package mypackage;
public class EN extends Lang {
{
hello = "hello";
}
}
filename FR.java
package mypackage;
public class FR extends Lang {
{
hello = "bonjour";
}
}