在创建课堂时非法自我参照

时间:2017-08-21 23:15:03

标签: java

我是Java新手,我的代码在Charmander / Squirtle / Bulbasaur.moveList

下面的行中给出了错误“Illegal Self reference”
static Pokemon Charmander = new Pokemon("Fire", "Charmander", 25, Charmander.moveList);
static Pokemon Squirtle = new Pokemon("Water", "Squirtle", 25, Squirtle.moveList);
static Pokemon Bulbasaur = new Pokemon("Grass", "Bulbasaur ", 25, Bulbasaur.moveList);

这是我的代码

public class Pokemon_Builder {

  public static void main(String[] args) {
    Move_Builder mb = new Move_Builder();
    Charmander.moveList.add(mb.Ember);
    Charmander.moveList.add(mb.Scratch);
    Charmander.moveList.add(mb.Willowisp);
    Charmander.moveList.add(mb.Recover);
    Squirtle.moveList.add(mb.Bubble);
    Squirtle.moveList.add(mb.Tackle);
    Squirtle.moveList.add(mb.Powdersnow);
    Squirtle.moveList.add(mb.Recover);
    Bulbasaur.moveList.add(mb.Vinewhip);
    Bulbasaur.moveList.add(mb.Poisonpowder);
    Bulbasaur.moveList.add(mb.Tackle);
    Bulbasaur.moveList.add(mb.Recover);
    System.out.println(Charmander.moveList.size());
  }
  static Pokemon Charmander = new Pokemon("Fire", "Charmander", 25, Charmander.moveList);
  static Pokemon Squirtle = new Pokemon("Water", "Squirtle", 25, Squirtle.moveList);
  static Pokemon Bulbasaur = new Pokemon("Grass", "Bulbasaur ", 25, Bulbasaur.moveList);
}

以下是口袋妖怪类的代码:

import java.util.LinkedList;
import java.util.List;

public class Pokemon{
  String type;
  String name;
  int health;
  List<Move> moveList = new LinkedList<Move>();
  public Pokemon(String type, String name, int health, LinkedList moveList) {
    this.type = type;
    this.name = name;
    this.health = health;
    this.moveList = moveList;
  }
  public void getInfo (){
    System.out.println("Pokemon Name "+ this.name);
    System.out.println("Your Pokemon's type "+ this.type);
    System.out.println("Your Pokemon's health "+ this.health);
  }
  public void addMove(Move toAdd){
    if (moveList.size() < 5){
        moveList.add(toAdd);
    }
    else{System.out.println("Can't learn any more moves!");
    }
  }
}

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

在你的班级Pokemon_builder中你创建3个口袋妖怪,同时创建那些你提供了一个moveList的口袋妖怪。那些movelist是在创造宠物小精灵时创造的。这意味着你现在要做的是将一个口袋妖怪的领域传递给那个口袋妖怪的构造函数。

答案 1 :(得分:0)

当您的Pokemon对象自己实例化时,静态成员对象创建在构造函数之前运行。您正在尝试创建一个名为Charmander的对象,并将Charmander的构造函数传递给Charmander中的静态“movelist”对象。您正在执行此操作之前Charmander已完成其对象实例化过程。因此,您正在尝试创建一个对象,该对象本身需要一个引用来“构造”自身。