下午好, 我想问一下使用字符串作为参考的方法。
假设我有两个名为LinkedList
ChinaShip
和HongkongShip
的{{1}}类型的对象
通常,如果我想访问某个方法(例如getFirst()
)
我将输入ChinaShip.getFirst()
现在,让我们说在其他对象中,我得到一个变量Destination
,其内容是一个String。
内容示例为China
和Hongkong
是否可以使用变量的内容作为访问LinkedList对象的名称?
我的方法首先是将变量首先连接起来,这将是Destination + "Ship"
这将生成string
ChinaShip
和HongkongShip
我这样做而不是比较字符串的原因是Destination
包含数百个可能性。
非常感谢。
此致
答案 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>();
然后在地图中搜索目的地密钥:
答案 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;),你将获得一份前往中国的船只清单,从那里你可以做你想做的事。