Ich habe die Methode drawPoliticCard()
, die ich in der Methode von einer anderen Klasse applyBonus()
verwenden muss, kann ich es leicht mit einem statischen Attribut tun, aber das Problem ist, dass ich in der Lage sein, zwei Instanzen von auszuführen das Spiel unabhängig zur gleichen Zeit, so wenn beide statisch beide Instanzen das gleiche Kartenspiel teilen. Deshalb wollte ich wissen, ob es einen Weg gibt, dies zu tun, ohne ein statisches Attribut zu verwenden. Ich werde die Getter und Setter der Attribute weglassen, um es prägnanter zu machen.Java, das keine statische Variable verwendet
public class PoliticCard {
private static ArrayList<Color> politicCards;
public void setDeck(){
setPoliticCards(new ArrayList<Color>());
getPoliticCards().add(Color.BLACK);
getPoliticCards().add(Color.PURPLE);
getPoliticCards().add(Color.BLUE);
}
public static void drawPoliticCard(Player player){
player.getPoliticCards().add(getPoliticCards().get(0));
getPoliticCards().remove(0);
}
}
public class Bonus {
protected int number;//The number of politic cards added in BonusPoliticCard
}
public class BonusPoliticCard extends Bonus {
public BonusPoliticCard(int number) {
this.number=number;
}
public void applyBonus(Player player){
int i=0;
while(i<number){
PoliticCard.drawPoliticCard(player);
i++;
}
}
}
Ich weiß, dass eine Methode aus einer anderen Funktion aufrufen Sie eine neue Instanz der Klasse erstellen sollten, aber wenn ich, dass ich ein nullpointerexception
erhalten tun, wenn die Prüfung.
public class BonusPoliticCard extends Bonus {
public BonusPoliticCard(int number) {
this.number=number;
}
public void applyBonus(Player player){
int i=0;
while(i<number){
PoliticCard politicCard = new PoliticCard();
politicCard.drawPoliticCard(player);
i++;
}
}
}
public class BonusPoliticCardTest {
@Test
public void testBonusPoliticCard() {//This ran fine when it was static
Bonus bonus = new BonusPoliticCard(3);
Player player = new Player(1);
PoliticCard politicCard = new PoliticCard();
politicCard.setDeck();
bonus.applyBonus(player);
assertNotNull(player.getPoliticCards().get(2));
}
}
Können Sie Stack-Trace schreiben? – hubot
Wo ist Ihre Hauptmethode? Schau dir [mcve] an. – Gendarme
Haben Sie zwei Konten oder arbeiten Sie an demselben Code wie dieser andere Benutzer? http://stackoverflow.com/questions/37597778/java-calling-a-method-without-creating-an- instance –