我有两节课。
LetLangParser ()
LetLangExp()
LetLangExp有子类ConstExp。
class ConstExp extends LetLangExp {
int value;
public ConstExp(int value){
this.value=value;
}
}
LetLangParser定义为
LetLangParser() {
LetLangExp LcExp;
LcExp=ParseE();
}
static LetLangExp ParseE() {
** do some calculation **
int x= *do some calculation*
}
这里我想将x转换为LcExp。我怎么能这样做?
答案 0 :(得分:0)
Java是一种强类型语言。您不能随意将一种类型的变量或值(例如int)分配给不同无关类型的变量(例如LetLangExp)。没有办法做到这一点。
此规则的例外是您可以将int变量分配给Integer包装器类型的变量,因为内部Java在原始类型及其包装类型之间执行自动装箱/取消装箱,但是如果您分配int,这将不起作用到整数以外的任何其他类型。
在您的情况下,如果要将x的值传递回变量LcExp的值,则可以使用ConstExp子类中的实例变量传递x。所以像这样:
LetLangParser() {
LetLangExp LcExp;
LcExp=ParseE();
}
static LetLangExp ParseE() {
** do some calculation **
int x= *do some calculation*
ConstExp exp = new ConstExp(x);
return exp;
}
编辑:作为后续问题的答案,如果要打印方法返回的值,则需要在ConstExp类中添加一个getter方法,以便能够像这样检索值。
class ConstExp extends LetLangExp {
int value;
public ConstExp(int value){
this.value=value;
}
public int getValue(){
return this.value;
}
}
然后,为了打印返回的值,您需要将LcExp变量强制转换为其ConstExp子类型,并使用上面添加的getter方法检索该值,然后打印它,如:
LetLangExp LcExp;
LcExp=ParseE();
//cast LcExp to ConstExp sub-type
ConstExp constExp = (ConstExp) LcExp;
//print the value after retrieving it using the getter method
System.out.println(constExp.getValue());