簡體   English   中英

為什么我不能在if語句中轉換對象?

[英]Why can't I cast an object inside of an if statement?

我這里沒有看到這個確切的問題,這讓我感到驚訝。

以下內容無法編譯:

public int compareTo( Object o )
{
    if ( this.order < ((Category o).order) )
    {
      return -1;
    }
    else if ( this.order > ((Category o).order) ) 
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

而更改此選項以轉換對象並將其引用存儲在條件語句之外的新對象中可修復問題:

Category cat = ( Category )o;
if ( this.order < cat.order )
// Etc...

我的問題是,為什么Java中不允許這種行為? (具體是Java 5)

編輯:啊哈! 謝謝你們。 Darn現代IDE提供模糊的錯誤消息。 我已經開始打折他們了,這次對我沒什么好處。 (Netbeans警告我關於缺少括號和缺少分號......)

這里的問題是你的語法不對。 它應該是

public int compareTo( Object o )
{
    if ( this.order < ((Category) o).order )
    {
      return -1;
    }
    else if ( this.order > ((Category) o).order ) 
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

我更喜歡語法

Category.class.cast(o)

那么你明確你正在做什么,它避免與括號混淆。 從我的理解,以上是((類別)o)

這應該被允許,似乎你的括號可能是關閉的:你嘗試過類似的東西

if(this.order <(((Category)o).order))

我想你需要這個:

(((Category) o).order)

我剛剛嘗試了一個更簡單的版本:

int a = 5;
        if(4 < (double)a);

它編譯得很好。

您發布的兩個代碼段之間存在明顯差異:

(Category o)

不同於:

( Category )o

第一個不會編譯,第二個會編譯。

看看if在以下if下進行鑄造的簡單工作演示:

int i;
float d = 10.5f;
if((i = (int) d) == 10){
//works
}

你的代碼問題是if ( this.order < ((Category o).order) )它的錯誤語句

它應該是if ( this.order < ((Category) o).order)

編輯:你的問題解決但更多的事情額外的頂部 ),沒有else梯形式 ),因為你在內部return if

public int compareTo( Object o )
{
    if ( this.order < ((Category) o).order )
    {
        return -1;
    }
    if ( this.order > ((Category) o).order ) 
    {
        return 1;
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM