2017-09-18 2 views
0

J'essaie de copier un objet en passant un paramètre à la méthode que j'utilise pour copier avec. Dans le constructeur de l'objet après que j'essaie de le copier le paramètre devient null.Très étrange NPE en essayant de copier un objet

C'est la classe que je suis en train de copier:

/** 
* Represents the extra health perk 
*/ 
public class ArrowRegen implements Perk 
{ 
    private int id = 0; 

    private double chance = 0.15; 

    private int level = 0; 
    private int price = 1000; 
    private int arrowGain = 0; 

    private GamePlayer ourPlayer; 

    public ArrowRegen(){} 

    public ArrowRegen(GamePlayer ourPlayer) 
    { 
     this.ourPlayer = ourPlayer; 

     if(this.ourPlayer == null) 
      aa.debug("its null"); 
    } 

    @Override 
    public Perk getThisPerk(GamePlayer player) 
    { 
     aa.debug("returning an arrow regen"); 

     if(player == null) 
      aa.debug("player is null? somehow?"); 

     return new ArrowRegen(ourPlayer); 
    } 
} 
  • rien est nulle jusqu'au point dans le constructeur au commentaire « son null ». *

C'est là que j'appelle la copie de:

player.addActivePerks(PerkEngine.getPerk(1).getThisPerk(player)); 

(joueur est un objet Gameplayer)

Voici le bit PerkEngine:

/** 
* Gets a perk by it's ID 
* @param id The Perk's ID 
* @return The Perk with the specified ID 
*/ 
public static Perk getPerk(int id) 
{ 
    for(Perk perk : perks) 
    { 
     if(perk.getID() == id) 
     { 
      return perk; 

     } 
    } 

    // This will never return null 
    return null; 
} 

EDIT:

Je viens de réaliser que mon erreur était dans le "g etThisPerk "méthode. Lors du retour du nouvel objet, je passe dans la mauvaise variable.

Répondre

-1

Je viens de réaliser que mon erreur était dans la méthode "getThisPerk". Lors du retour du nouvel objet, je passe dans la mauvaise variable.

+0

C'est ce que voulait souligner à la réponse supprimée. –