簡體   English   中英

“嵌套類型不能隱藏封閉類型”類 - Java 處理

[英]"The nested type cannot hide an enclosing type" class - Java Processing

我收到此錯誤: The nested type cannot hide an enclosing type 我查了一下,其他人似乎兩次宣布他們的班級,而我不是。

奇怪的是,如果我將代碼復制並粘貼到新的處理文檔中,它可以正常工作。 但是當我將它轉換為 js 時,我需要它在保存並再次打開后沒有錯誤地工作。

MotorBike Bike1, Bike2, Bike3, Bike4, Bike5, Bike6, Bike7, Bike8, Bike9;
int Score_Bike1 = 0;
int Score_Bike2 = 0;
int Score_Bike3 = 0;
int Score_Bike4 = 0;
int Score_Bike5 = 0;
int Score_Bike6 = 0;
int Score_Bike7 = 0;
int Score_Bike8 = 0;
int Score_Bike9 = 0;
String Score_Spacing = "        ";
int GameState = 0;


class MotorBike {
float Pos_X;
int Pos_Y;
float Speed;
int Size = 30;
float WheelSize = Size / 3;
color Color;


MotorBike(int Declare_X, int Declare_Y, int Declare_Speed, color Declare_Color)                                                                                                    
{
this.Pos_X = Declare_X;
this.Pos_Y = Declare_Y;
Speed = Declare_Speed;
Color = Declare_Color;
}

void move()
{
if (GameState == 1) {
  Speed = (random(0, 50) / 10);
  Pos_X = Pos_X + Speed;
}
}

void render()
{
fill(Color);
triangle(Pos_X, Pos_Y, Pos_X + Size, Pos_Y, Pos_X + Size / 2, Pos_Y -Size /      2);
fill(255);
strokeWeight(1.5);
ellipse(Pos_X, Pos_Y, WheelSize, WheelSize);
ellipse(Pos_X + Size, Pos_Y, WheelSize, WheelSize);
}
}

void setup()
{
size(700, 600);
background(200);
SpawnBikes();
}

void draw()
{
background(200);
strokeWeight(3);
line(50, 10, 50, 590);
line(650, 10, 650, 590);
strokeWeight(1);
MoveBikes(); 
DetectWinner();
DisplayScore();
}

void MoveBikes()
{
Bike1.render();
Bike1.move();
Bike2.render();
Bike2.move();
Bike3.render();
Bike3.move();
Bike4.render();
Bike4.move();
Bike5.render();
Bike5.move();
Bike6.render();
Bike6.move();
Bike7.render();
Bike7.move();
Bike8.render();
Bike8.move();
Bike9.render();
Bike9.move();
}

void DetectWinner()
{
textSize(15);
fill(0); 
if (Bike1.Pos_X >= 620) {
noLoop(); 
text("Bike 1 Wins", 310, 10, 350, 50); 
Score_Bike1 += 1;
GameState = 2;
}
if (Bike2.Pos_X >= 620) {
noLoop(); 
text("Bike 2 Wins", 310, 10, 350, 50); 
Score_Bike2 += 1;
GameState = 2;
}
if (Bike3.Pos_X >= 620) {
noLoop(); 
text("Bike 3 Wins", 310, 10, 350, 50); 
Score_Bike3 += 1;
GameState = 2;
}
if (Bike4.Pos_X >= 620) {
noLoop(); 
text("Bike 4 Wins", 310, 10, 350, 50); 
Score_Bike4 += 1;
GameState = 2;
}
if (Bike5.Pos_X >= 620) {
noLoop(); 
text("Bike 5 Wins", 310, 10, 350, 50); 
Score_Bike5 += 1;
GameState = 2;
}
if (Bike6.Pos_X >= 620) {
noLoop(); 
text("Bike 6 Wins", 310, 10, 350, 50); 
Score_Bike6 += 1;
GameState = 2;
}
if (Bike7.Pos_X >= 620) {
noLoop(); 
text("Bike 7 Wins", 310, 10, 350, 50); 
Score_Bike7 += 1;
GameState = 2;
}
if (Bike8.Pos_X >= 620) {
noLoop(); 
text("Bike 8 Wins", 310, 10, 350, 50); 
Score_Bike8 += 1;
GameState = 2;
}
if (Bike9.Pos_X >= 620) {
noLoop(); 
text("Bike 9 Wins", 310, 10, 350, 50); 
Score_Bike9 += 1;
GameState = 2;
}
}

void DisplayScore()
{
textSize(15);
fill(0); 
text("Bike 1: " + Score_Bike1 + Score_Spacing + "Bike 2: " + Score_Bike2 +   Score_Spacing + "Bike 3: " + 
Score_Bike3 + Score_Spacing +  "Bike 4: " + Score_Bike4 + Score_Spacing +   "Bike 5: " + Score_Bike5 + Score_Spacing + 
"Bike 6: " + Score_Bike6 + Score_Spacing +  "Bike 7: " + Score_Bike7 + Score_Spacing +  "Bike 8: " + Score_Bike8 + 
Score_Spacing + "Bike 9: " + Score_Bike9, 65, 530, 635, 700);
}

void keyPressed()
{
if (keyPressed) { 
if (key == ' ') 
{
  if (GameState == 0) {
    GameState = 1;
  }
  if (GameState == 2) {
    loop();
    background(200);
    SpawnBikes();
    GameState = 0;
  }
  }
}
}

void SpawnBikes()
{
Bike1 = new MotorBike(50, 100, 2, color(255, 0, 0));
Bike2 = new MotorBike(50, 150, 2, color(0, 255, 0)); 
Bike3 = new MotorBike(50, 200, 2, color(0, 0, 255)); 
Bike4 = new MotorBike(50, 250, 2, color(255, 255, 0));
Bike5 = new MotorBike(50, 300, 2, color(0, 255, 255)); 
Bike6 = new MotorBike(50, 350, 2, color(255, 0, 255)); 
Bike7 = new MotorBike(50, 400, 2, color(100, 255, 0));
Bike8 = new MotorBike(50, 450, 2, color(0, 100, 255)); 
Bike9 = new MotorBike(50, 500, 2, color(255, 0, 100));
}

您的問題是由於您將草圖命名為與您在草圖中使用的類相同的名稱。 如果草圖中有一個MotorBike類,則您的草圖不能命名為MotorBike

重命名您的草圖,或重命名您的班級。

在幕后,這是因為 Processing 將您的 Sketch 導出為 Java 類,並且您的 Sketch 中的任何類都成為該 Java 類的內部類。 所以你的草圖變成了這樣:

class MotorBike{
   void draw(){
      //whatever
   }

   class MotorBike{
      int x;
      //whatever
   }
}

這是非法的 Java,這是導致您出錯的原因。 內部類不能與父類同名。 換句話說,嵌套類型不能隱藏封閉類型。

這也是為什么當您將其復制到新草圖時它可以正常工作的原因 - Processing 會為您的草圖提供一個隨機的默認名稱,因此在您將草圖另存為其他內容之前,您不會遇到此名稱沖突。

暫無
暫無

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

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