これはばかげた質問かもしれませんが、私はこれにうんざりしています。クラスオブジェクトを適切に初期化して、その中のメソッドと変数にアクセスできるようにするにはどうすればよいですか?これが私のコードです:
public class GenChunk {
Chunk c;
VBO vbo;
int worldSize = 64;
int var1 = 16; //x
int var2 = 16; //z
int var3 = 16; //y
public GenChunk(){
gen();
}
public void gen(){
c = new Chunk();
if(c.chunkChanged == false){
for(int i = 0; i < worldSize; i++){
newChunk();
}
}
}
この行c = new Chunk()
がスタックオーバーフローエラーを引き起こしています。理由はわかりますが(新しいインスタンスを作成し、メモリを消費するため)、コンストラクターで初期化するか、単に実行するとすぐにChunk c = new Chunk()
、下の上部に次のように表示されpublic class GenChunk {
ます。別のスタックオーバーフローエラー!クラスを初期化しないと、(明らかに)nullポインターを取得します。私のコードの何が問題になっていますか?私は何かを見落としているに違いありませんが、それを理解することはできません!
これが私のChunkクラスです。いくつかの空のメソッドがあります。
public class Chunk {
public boolean chunkChanged = false;
boolean enteredGame = true;
public int chunkID = 0;
Player player;
float var1;
float var2;
float var3;
public Chunk(){
update();
}
private void update(){
setUp();
}
private void setUp(){
if(enteredGame){
new GenChunk();
}
}
private void checkChunkRebuild(int id){
}
private void rebuildOnPlayerChange(int id){
if(enteredGame && chunkChanged == true){
}
}
private float getPlayerX(){
return player.var1;
}
private float getPlayerZ(){
return player.var2;
}
private float getPlayerY(){
return player.var3;
}
}