java中无与伦比的类型

时间:2013-01-13 18:30:20

标签: java

对于这行代码,我得到了这段代码,并收到错误incomparable types: java.lang.String and int     if ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

方法是:

public int compareTo(Object o)
{
    int result;
    AnyClass obj = (AnyClass)o;
    if ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))
    {
        result = 0;
    }
   else if (this.name.compareTo(obj.name) > 0)
    {
        result = 1;
    }
    else
    {
        result = -1;
    }
    return result;
}

8 个答案:

答案 0 :(得分:6)

我认为你的支架位置不正确,

this.name.String.compareTo(obj.name == 0)) 

obj.name == 0是您可能将String(name)与int(0)进行比较的地方。我想你想在obj.name上使用compareTo然后检查它是否等于零。

我也认为在第二部分

(this.age = obj.age)

你想使用==而不是=,所以我认为你想要使用的代码是:

((this.name.compareTo(obj.name)==0) && (this.age == obj.age))

答案 1 :(得分:2)

您无法将字符串与整数进行比较:)

可以将字符串“001”转换为整数“1”;或字符串“1”中的整数“1”。

请参阅Integer.parseInt()Integer.toString()

答案 2 :(得分:1)

compareTo接受Object引用(在您的情况下为一个字符串)作为参数。但是你的代码compareTo(obj.name == 0)传入布尔值,这是不合适的。

答案 3 :(得分:1)

我认为代码

 if ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

实际上应该像这样阅读

 if ((this.name.compareTo(obj.name) == 0) && (this.age == obj.age))

更改== 0的位置(并将第二个=更改为==)会使此代码有意义。

答案 4 :(得分:1)

此实施存在许多问题。对于类Comparable来说,这似乎是AnyClass的实现,这意味着签名是错误的。

AnyClass应该实现Comparable<AnyClass>,代码应如下所示:

@Override
public int compareTo(AnyClass other)
{
    int ret = name.compareTo(other.name);
    return ret != 0 ? ret : Integer.compare(age, other.age);
}

如果你使用番石榴:

@Override
public int compareTo(AnyClass other)
{
    return ComparisonChain.start().compare(name, other.name)
       .compare(age, other.age).result();
}

答案 5 :(得分:0)

((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

obj.name是一个String,0是一个int。那就是你得到错误的地方

答案 6 :(得分:0)

obj.name是字符串,您将其与0进行比较。

答案 7 :(得分:0)

如果您使用代码解释您的意图,则会更容易。第一个错误似乎是compareTo obj.name == 0中的比较。

尝试

if ((this.name.String.compareTo(obj.name) == 0) && (this.age == obj.age))

我想你想要实现的目标。