gpt4 book ai didi

Java 在构造函数之前调用方法

转载 作者:行者123 更新时间:2023-12-01 11:27:50 25 4
gpt4 key购买 nike

我有一个 Map 类,它有一个 setMapName 方法,它从 Enum mapName 中进行选择来设置它,在构造函数内部有一条规则,可以根据 mapName 值从数组扇区中命名一个单元格,无论是外星人还是人类,我想测试细胞的名称是否确实是外星人或人类,但我得到空。

public class Map {
private Name mapName;
private final Sector [][] sector;
private int Matrix [][];
private static final int X=23;
private static final int Y=14;
public Map (){
sector = new Sector[X][Y];
for (int i=0; i < X; i++){
for (int j=0; j<Y; j++) {
sector[i][j] = new Sector (i,j);
}
}
Matrix = new int[23][14];
if(mapName==Name.FERMI){
sector[10][8]=new Alien(10,8);
sector[10][9]=new Human(10,9);
}
if(mapName==Name.GALILEI||mapName==Name.GALVANI){
sector[10][5]=new Alien(10,5);
sector[10][7]=new Human(10,7);
}
}
public int[][] getMatrix() {
return Matrix;
}
public void setMatrix(int matrix[][]) {
Matrix = matrix;
}
public Name getMapName() {
return mapName;
}
public void setMapName(Name mapName) {//this is the method i want to use before the constructor
this.mapName = mapName;
}
public Sector[][] getSectors(){
return sector;
}
public void addSectors(){
Sector.add(sector);
}
}

public enum Name {
FERMI, GALILEI, GALVANI
}

public class MapTest {
@Test
public void testMapAlien(){
Map map = new Map();
map.setMapName(Name.FERMI);
assertEquals(Name.Alien, map.getSectors()[10][8].getSectorName());
}
}

最佳答案

您的setMapName是您的Map类上的非静态成员函数(命名不佳,因为它与java.util.Map冲突) 。这意味着它可以在 Map 的现有实例上调用(例如已经构造的 Map)。

您的问题是,您在调用构造函数后调用 setMapName,但您的构造函数需要有效的 Name 才能正常工作!这是一个经典的先有鸡还是先有蛋的问题。

为什么不直接将 MapName 传递给构造函数?

public Map (Name mapName){
sector = new Sector[X][Y];
for (int i=0; i < X; i++){
for (int j=0; j<Y; j++) {
sector[i][j] = new Sector (i,j);
}
}
Matrix = new int[23][14];
if(mapName==Name.FERMI){
sector[10][8]=new Alien(10,8);
sector[10][9]=new Human(10,9);
}
if(mapName==Name.GALILEI||mapName==Name.GALVANI){
sector[10][5]=new Alien(10,5);
sector[10][7]=new Human(10,7);
}
...
}

关于Java 在构造函数之前调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com