[英]Why does Java think my object is a variable?
好的,所以我試圖做一個簡單的乒乓球游戲。 我有一個跟隨鼠標的槳和一個反彈的球。 我在Sprite類中編寫了一個collidesWith(Sprite s)
方法,該方法檢查球是否與槳碰撞(這是可行的,而不是問題)。 我有兩個擴展我的Sprite類的對象,一個球和一個球拍對象。 因此,在我的球類課程中,我試圖檢查它是否與槳碰撞。 所以我嘗試了
if(this.collidesWith(paddle) == true){
System.out.println("They touched");
}
我也嘗試過ball.collidesWith(paddle)
和其他組合,但是它總是對槳(和當我使用ball.collidesWith
時的球)說同樣的話"Cannot find symbol. Symbol: variable paddle(or ball). Location: class Ball"
因此,如果我沒看錯,它會認為槳(和球)是變量,並且會抱怨,因為找不到它們。 如何使其理解我正在傳遞對象,而不是變量?
為了獲得更多信息,我之前的任務是讓我制作兩個盒子,讓他們在發生碰撞時改變顏色。 在該作業中,我使用了與上面非常相似的代碼
if(boxOne.collidesWith(boxTwo) == true){
System.out.println("yes");
}
在這段代碼中,它工作得很好。 該程序知道boxOne和boxTwo是我的Sprite類的子類。 有人知道為什么他們不一樣嗎?
class Paddle {}
Paddle
是一類。
Paddle paddle;
paddle
是一個變量,尚未引用Paddle
類的實例(也稱為對象)。
Paddle paddle = new Paddle();
該paddle
是一個變量,它引用Paddle
的實例。
ball.collidesWith(paddle)
是一個表達式,該表達式在名為ball
的變量所引用的對象上調用名為collidesWith
的方法,並將由paddle
變量所引用的對象傳遞給該方法。 如果尚未在此表達式的相同或封閉的詞法范圍內定義名為ball
的變量和名為paddle
的變量,則該表達式無效。 如果您已創建變量ball
和paddle
但尚未將它們設置為引用某個實例,則該表達式將編譯但無法正確執行。 您應該具有以下內容:
Ball ball = new Ball();
Paddle paddle = new Paddle();
if (ball.collidesWith(paddle)) { ... }
或者,如您所指出的,如果您屬於Ball類,那么您可能會遇到以下情況:
class Ball {
boolean collidesWith(Paddle paddle) {
...
}
void somethingElseWithAPaddle(Paddle paddle) {
if (this.collidesWith(paddle)) { ... }
}
}
在這種情況下, this
是一個不必定義的變量,它引用了在其上調用方法的對象。 無論您在哪里編寫表達式, paddle
都必須是一個在可見位置聲明的變量。
我的猜測(與您所提供的有限信息一樣,我只能做些猜測):您沒有在球類知道的范圍內聲明paddle
。 或者也許您確實聲明了它,但是在此代碼運行時尚未定義它。
通常,您將編寫一個管理類,該類知道並維護槳實例,同時也知道球實例。 與其讓球檢查是否有碰撞,不如讓管理班級來做。 考慮到管理類也將負責構建您的球拍和球,因此已經將它們放在正確的范圍內。 您的管理類將對兩個槳中的每一個都有一個ball.collidesWith(paddle)
檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.