使用String作为实例对象名称

时间:2012-04-08 05:49:41

标签: java

我有这个代码从其他类获取信息但我必须为每个实例对象添加另一行其他代码。

public static int giveShipData(String shipName,int Data){
    if(shipName.equals("Player")){i = Player.getData(Data);}
    return i;
}

是否可能有类似的内容:

public static int giveShipData(String shipName,int Data){
    i = shipName.getData(Data);
    return i;
}

对不起,如果我使用了错误的术语,我就是自学和新的。

3 个答案:

答案 0 :(得分:2)

我认为你最好重新考虑你的设计。如果您有船名和船舶数据,我假设您必须拥有类似于此的Ship类:

public class Ship {
    private String name;
    private int data;

    public Ship(String name, int data) {
        this.name = name;
        this.data = data;
    }

    public String getName() {
        return name;
    }

    public int getData() {
        return data;
    }
}

除了这门课,还应该有一个类Shipyard

 public class Shipyard {
    private Map<String, Ship> shipsByNameMap = new HashMap<String, Ship>();

    public void registerShipByName(String name, Ship ship){
        shipsByNameMap.put(name, ship);
    }

    public Ship getShipByName(String name){
        return shipsByNameMap.get(name);
    }
}

因此,首先调用shipyard.getShip(“Player”)方法来获取ship对象,而不是调用ship.getData()方法来检索船舶数据。

答案 1 :(得分:0)

您可以做这样的事情......

int[] ships = new int[3]; // 3 ships

public void populateShips(){
  for (int i=0;i<ships.length;i++){
    ships[i] = giveShipData(shipname,data);
    }
  }

public int giveShipData(String shipName,int data){
    return shipName.getData(data);
}

这将允许您创建任意数量的船只,只需将ships[]阵列的大小增加到您想要的许多船只。

这就是你所追求的吗?

答案 2 :(得分:0)

根据您的代码,“shipName”是一个字符串......并且它没有getData()方法。你为什么要将数据传递给getData()......你可以改为写这样的东西 -

 i = ClassObj.getData(shipname);

并在方法getData中返回有关“shipname”的信息。