Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 翻译中抽象类的专业使用_Java_Oop_Class_Jakarta Ee_Abstract Class - Fatal编程技术网

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

下面的代码没有给出我想要的答案,我不知道问题出在哪里? 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 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/<代码>方法,然后在子类中重写此方法,以返回每个键的正确翻译。