Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字符串作为实例对象名称_Java - Fatal编程技术网

Java 使用字符串作为实例对象名称

Java 使用字符串作为实例对象名称,java,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 =

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

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;
}

抱歉,如果我使用了错误的术语,我是自学成才的新手。

您可能可以这样做

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);
}
int[]ships=newint[3];//3艘船
公共权力{
对于(int i=0;i,根据您的代码,“shipName”是一个字符串…并且它没有getData()方法。为什么要将数据传递给getData()…您可以编写如下内容-

 i = ClassObj.getData(shipname);

在方法getData中,返回有关“shipname”的信息。我认为您最好重新考虑您的设计。如果您有船名和船数据,我假设您必须有一个类似以下内容的船类:

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;
    }
}
除了这个类之外,还应该有一个类,如
Shippyard

 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);
    }
}
公共级造船厂{
私有映射shipsByNameMap=newhashmap();
public void registerShipByName(字符串名称,装运){
shipsByNameMap.put(名称、船舶);
}
公共船舶GetShippyName(字符串名称){
返回shipsByNameMap.get(名称);
}
}

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

Player#getData
一个静态类方法,它接收
int
,并返回另一个
int
i=shipName.getData(data);
是错误的。
shipName
String
类的实例,并且没有
getData
方法。如果不必这样做,我会很高兴,但这会起作用的。谢谢。这似乎正是我想要的。+1对于造船厂来说。:-)建议:如果
registerShipByName
接受两个参数,那么第二个参数可能是
数据
。这样,它可以创建一个新的
Ship
,然后注册它。如果
Ship
已经存在,那么
registerShipByName
只需要
Ship
参数,并且t可以从
发货
获取
名称