Java使用字符串作为对象调用

时间:2014-04-01 08:36:39

标签: java string object

下午好, 我想问一下使用字符串作为参考的方法。

假设我有两个名为LinkedList ChinaShipHongkongShip的{​​{1}}类型的对象

通常,如果我想访问某个方法(例如getFirst()) 我将输入ChinaShip.getFirst()

现在,让我们说在其他对象中,我得到一个变量Destination,其内容是一个String。 内容示例为ChinaHongkong

是否可以使用变量的内容作为访问LinkedList对象的名称?

我的方法首先是将变量首先连接起来,这将是Destination + "Ship"

这将生成string ChinaShipHongkongShip

我这样做而不是比较字符串的原因是Destination包含数百个可能性。

非常感谢。

此致

4 个答案:

答案 0 :(得分:1)

您可以使用反射API。如果列表是在MyClass类中声明的,则可以使用以下代码:

LinkedList list = (LinkedList) MyClass.class.getDeclaredField(Destination + "Ship").get(this);

这假定从MyClass对象中调用上述代码,否则get(this)调用必须更改为get(myClassInstance)。虽然正如MadProgrammer所提到的,你可能更善于使用Map。

答案 1 :(得分:1)

您可以使用地图并使用目标字符串作为密钥,因为这些字符串将是唯一的:

Map<Desitnation, value> destinations = new HashMap<Desitnation, value>();

然后在地图中搜索目的地密钥:

http://www.tutorialspoint.com/java/util/hashmap_get.htm

答案 2 :(得分:1)

不幸的是,你不能用Java做到这一点。但这更接近于:

HashMap<String, LinkedList> dest = new HashMap<String, LinkedList>();
dest.put("China", ChinaShip);
dest.put("Hongkong", HongkongShip);
.....

if(dest.containsKey(Destination){
    dest.get(Destination).getFirst();
}

答案 3 :(得分:0)

我认为你需要重新构建你的架构。您不必从Strings创建方法名称。

在我看来,您需要一个具有目的地和船舶链接列表的Ship对象。

如果您需要按目的地映射船只,您还可以使用地图,其中键是目标字符串,值是到达该目的地的船只的链接列表。

所以,如果你做了map.get(&#34;中国&#34;),你将获得一份前往中国的船只清单,从那里你可以做你想做的事。