专业使用抽象类进行翻译

时间:2010-09-21 11:45:43

标签: java oop class java-ee abstract-class

下面的代码没有给我我想要的答案,我不知道问题出在哪里? 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>

6 个答案:

答案 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不等于ENFR,则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";
   }
}