Java 翻译中抽象类的专业使用
下面的代码没有给出我想要的答案,我不知道问题出在哪里? FR是EN的翻译(与.properties文件完全相同) 如果需要,我想从FR.java文件中读取翻译Java 翻译中抽象类的专业使用,java,oop,class,jakarta-ee,abstract-class,Java,Oop,Class,Jakarta Ee,Abstract Class,下面的代码没有给出我想要的答案,我不知道问题出在哪里? FR是EN的翻译(与.properties文件完全相同) 如果需要,我想从FR.java文件中读取翻译 我想从index.jsp页面访问fr.java或en.java的hello变量。但是我编写的代码提供了Lang.java中的值 String language = "FR"; package mypackage; abstract public class Lang { public String hello= "home pag
我想从index.jsp页面访问fr.java或en.java的hello变量。但是我编写的代码提供了Lang.java中的值
String language = "FR";
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
该条件位于.jsp文件中
JDK1.4给了我这个错误:错误(23,23):变量lang可能没有初始化
任何人都能帮上忙吗
文件名Lang.java
String language = "FR";
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
package mypackage;
abstract public class Lang {
public String hello= "home page";
}
文件名EN.java
package mypackage;
public class EN extends Lang {
public String hello = "hello";
}
package mypackage;
public class EN extends Lang {
{
hello = "hello";
}
}
文件名FR.java
package mypackage;
public class FR extends Lang {
public String hello = "bonjour";
}
package mypackage;
public class FR extends Lang {
{
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>
语言
如果语言
不等于EN
或FR
,则将不会初始化语言
。将其显式设置为if
前的new EN()
<%
String language = "EN";
Lang lang;
if (language.equals("EN")){
lang = new EN();
}
else if (language.equals("FR")){
lang = new FR();
}
%>
初始化局部变量是强制性的
我不明白这个条件的重要性,你在这里给语言赋值,那么条件需要什么呢?为lang变量设置一个默认值:
Lang lang = new EN();
if (language.equals("EN")){
lang = new EN();
}
else if (language.equals("FR")){
lang = new FR();
}
按如下方式更改条件:
if (language.equals("FR")){
lang = new FR();
}
// add more languages here
// example:
// else if (language.equals("DE")) {
// lang = new DE();
// }
else {
lang = new EN();
}
您的代码不符合语言既不是“EN”也不是“FR”的情况。选择默认语言,以便始终初始化lang
变量:
Lang lang;
if (language.equals("EN")){
lang = new EN();
}
else // default case
lang = new FR();
}
此外,不要为需要翻译的每个字符串声明一个属性(例如 String HOST ),请考虑声明一个以“KEY”为参数的方法,并返回相应的关键字转换。例如,在JSP中,可以使用如下内容:
out.print(lang.getString("home"));
然后让所有的Lang
子类为每个键返回正确的转换值
您可能还想看看。如果您想打印hello变量,请在抽象Lang类中声明该变量,并在具体类中初始化
文件名EN.java
package mypackage;
public class EN extends Lang {
public String hello = "hello";
}
package mypackage;
public class EN extends Lang {
{
hello = "hello";
}
}
文件名FR.java
package mypackage;
public class FR extends Lang {
public String hello = "bonjour";
}
package mypackage;
public class FR extends Lang {
{
hello = "bonjour";
}
}
如果lanuage=“EN”,则输出应为“hello”。否则如果lanuage=“FR”,输出应该是“bonjour”。我想从index.jsp页面访问FR.java或en.java的hello变量。但是我编写的代码提供了Lang.java中的值。您发布的代码是访问home
变量,而不是hello
变量。home
变量似乎只在Lang.java中定义,而不是在EN.java或FR.java中定义。对不起,这是我在问题中的错误,我编辑了代码。请再次检查。不能在子类中重写类变量。您可以重写类方法,但只能“隐藏”类变量。相反,请考虑我在类<代码>郎< /COD>中声明<代码> GETSHIGT/<代码>方法,然后在子类中重写此方法,以返回每个键的正确翻译。