如何将int转换为任何对象?

时间:2017-10-23 18:54:45

标签: java inheritance interpreter

我有两节课。

    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。我怎么能这样做?

1 个答案:

答案 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());