getClass()无法正常工作?

时间:2012-11-28 04:20:17

标签: java compareto

public int compareTo(Object a) {  
    int Output = 0;  
    if(this.equals(a))  
        Output = 0;  
    if(a instanceof this.getClass()) {  
        if(this._numDec > ((this.getClass())a)._numDec)   
        Output = 1;  
        if(this._numDec < ((this.getClass())a)._numDec)   
        Output = -1;  
    }  
    return Output;  
}

您好。我的CS讲师告诉我们班级要创建一个函数来确定两个值中哪一个更大,如果前者更大则输出1,如果它们相等则输出0,如果前者更小则输出-1。 this.getClass()最初是十六进制类,用于将十六进制值转换为_numDec。但是,当我尝试使用this.getClass()时,我收到错误。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

明确写出确切的类名。

if (a instanceof Hexadecimal) {  
    if (this._numDec > ((Hexadecimal) a)._numDec)   
        Output = 1;  
    if (this._numDec < ((Hexadecimal) a)._numDec)   
        Output = -1;  
}

顺便说一下,如果a不是Hexadecimal对象,那么你的方法将返回0.它应该返回非零值。

答案 1 :(得分:0)

由于您对getClass()的调用无效,因此您遇到问题,因为您使用了错误的转换语法。正确的语法形式为:

<type> target_var = (<type>) source_var;

其中<type>应该是实际的Java类型(基元或对象)。有效的Java原语类型是(int,float,long,double,char,boolean ...)。有效对象类型由其完全限定名称指定,如果导入类型,则为简单名称。例如(String,Serializable,Object,JFrame ......)。

在您的代码中,这一行:

if(this._numDec > ((this.getClass())a)._numDec)

无法编译,因为您将转换指定为this.getClass(),这是一个动态表达式,而不是有效类型。

有几种方法可以实现 真实的 目标,这也是确定所提供的对象是否可以与当前对象进行比较的类型,然后进行比较。这是一种这样的方式:

if(a instanceof Binary)) {
    if(this.getNumDec() > ((Binary)a).getNumDec())   
        Output = 1;  
    else 
        Output = -1;  
} else if(a instanceof Hexadecimal) {
    if(this.getNumDec() > ((Hexadecimal)a).getNumDec())
        Output = 1;
    else
        Output = -1;
}

请注意,我已使用访问器方法替换了直接属性访问的使用。