2015-12-12 168 views
1

的封閉實例的分配首先,我知道這個問題已經被回答,但是,我查看了所有可以找到的答案,而且都沒有幫助。'必須限定類型爲'

我在LibGDX中製作遊戲,模擬大像素物理。爲了創建不同類型的像素,我決定在我的Types類中創建類,空白空間也將是一種像素,我將渲染爲黑色,所以我有一個Types之間的類,名爲None,這將是用於空虛。

在我Main類,我創建一個包含其中包含的Types實例的ArrayList的ArrayList:

public ArrayList<ArrayList<Types>> grid; 

... 

for (int y = 0; y < 151; y++) { 
    ArrayList<Types> row = new ArrayList<Types>(); 
    for (int x = 0; x < 105; x++) { 
     row.add(Types.None); 
    } 
    grid.add(row); 
} 

而且,我的類型類看起來是這樣的:

package io.j4cobgarby.github; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Input.Keys; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.math.Vector2; 

public class Types { 

    public static Types None = new None(); 

    public float mass; 
    public Color colour; 
    public boolean dynamic; 
    public boolean conducts_electrons; 
    public float conducts_heat; 


    public Types(float mass, Color colour, boolean dynamic, boolean conducts_electrons, float conducts_heat) { 
     this.mass = mass; 
     this.colour = colour; 
     this.dynamic = dynamic; 
     this.conducts_electrons = conducts_electrons; 
     this.conducts_heat = conducts_heat; 
    } 

    public void getInput() { 

    } 

    public void dynamUpdate() { 

    } 

    public void staticUpdate() { 

    } 

    public void delete() { 

    } 

    public class None extends Types { 

     public None() { 
      super(0.0f, Color.BLACK, false, false, 0.0f); 
     } 

     @Override 
     public void getInput() { 
      if (Gdx.input.isKeyJustPressed(Keys.T)) { 
       System.out.println("T pressed"); 
      } 
     } 

    } 

} 

所以,我希望是我現在有一個包含151個ArrayList的ArrayList,每個ArrayList包含105個實例Types.None 但是,這不起作用。

Types線10 - public static Types None = new None(); - 我得到這個錯誤:

No enclosing instance of type Types is accessible. Must qualify the allocation with an enclosing instance of type Types (e.g. x.new A() where x is an instance of Types). 

這是爲什麼?我嘗試了很多東西,但我似乎無法讓它工作。

謝謝。

+0

[爪哇 - 類型的無封閉情況foo是接近]的可能的複製(http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-可訪問) – fabian

回答

2

由於您將無類的實例分配給靜態字段,因此無類也必須是靜態的。非靜態內部類只能存在於其外部類的實例中。

public static class None extends Types { 
    ... 
} 
+0

是的!這工作,謝謝! –

相關問題