在java中创建具有特定名称的动态对象
我有一个测试输入文件,对于不同的场景,应该在其中创建不同数量的对象在java中创建具有特定名称的动态对象,java,Java,我有一个测试输入文件,对于不同的场景,应该在其中创建不同数量的对象 Vertex v0 = new Vertex("a"); Vertex v1 = new Vertex("b"); Vertex v2 = new Vertex("c"); Vertex v3 = new Vertex("d"); Vertex v4 = new Vertex("e"); Vertex v5 = new Vertex("f"); 例如:对于一个测试输入,其必须是3
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
例如:对于一个测试输入,其必须是3个对象以名称v0、v1、v2创建,而对于其他测试输入,其必须是5个对象以名称v0、v1、v2、v3、v4创建
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
对于5个对象的静态程序,如下所示:
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
对于k=5(对象的数量),我想使其动态如下:
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
for(inti=0;i您需要的是一个
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
如果somevariable
保存在构造函数中传递的字符串,则print语句的输出将是
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
d
您需要的是
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
如果somevariable
保存在构造函数中传递的字符串,则print语句的输出将是
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
d
您可以使用贴图
,其中键是字符串
(名称),值是顶点
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
例如:Map
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
然后您可以这样做:
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
Map<String, Vertex> testObjs = new HashMap<String, Vertex>();
for(int i = 0; i < k; i++)
testObjs.put("v" + String.valueOf(i), new Vertex(i));
// The names would be like v1, v2, etc.
// Access example
testObjs.get("v1").doVertexStuff();
Map testObjs=newhashmap();
for(int i=0;i
您可以使用映射,其中键是字符串(名称),值是顶点
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
例如:Map
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
然后您可以这样做:
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
Map<String, Vertex> testObjs = new HashMap<String, Vertex>();
for(int i = 0; i < k; i++)
testObjs.put("v" + String.valueOf(i), new Vertex(i));
// The names would be like v1, v2, etc.
// Access example
testObjs.get("v1").doVertexStuff();
Map testObjs=newhashmap();
for(int i=0;i在普通Java中不可能做到这一点。您应该能够使用ASM或某些字节码操作库以某种方式实现它,但这并不值得。最好的方法是使用Map
。注意Map
是一个接口,HashMap
是它的实现
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
String[] names = {"v1", "v2", "v3"};
String[] constructorArgs = {"a", "b", "c"};
Map<String, Vertex> map = new HashMap<String, Vertex>();
for (int i = 0; i < names.length; i++)
{
map.put(names[i], new Vertex(constructorArgs[i]));
}
for (int i = 0; i < names.length; i++)
{
Vertex v = map.get(names[i]);
//do whatever you want with this vertex
}
String[]name={“v1”、“v2”、“v3”};
字符串[]构造函数args={“a”、“b”、“c”};
Map Map=newhashmap();
for(int i=0;i
您可以通过map.get(name)
使用变量名称访问变量
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
有关ASM的更多信息,请参见。在纯Java中不可能做到这一点。您应该能够使用ASM或某些字节码操作库以某种方式实现它,但这并不值得。最好的方法是使用Map
。请注意Map
是一个接口,HashMap
是它的实现
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
String[] names = {"v1", "v2", "v3"};
String[] constructorArgs = {"a", "b", "c"};
Map<String, Vertex> map = new HashMap<String, Vertex>();
for (int i = 0; i < names.length; i++)
{
map.put(names[i], new Vertex(constructorArgs[i]));
}
for (int i = 0; i < names.length; i++)
{
Vertex v = map.get(names[i]);
//do whatever you want with this vertex
}
String[]name={“v1”、“v2”、“v3”};
字符串[]构造函数args={“a”、“b”、“c”};
Map Map=newhashmap();
for(int i=0;i
您可以通过map.get(name)
使用变量名称访问变量
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");
有关ASM的更多信息,请参见。Nope,使用数组或Map
。可以帮助吗?@Mateusz不同,我想创建非变量对象。Nope,使用数组或Map
。可以帮助吗?@Mateusz不同,我想创建非变量对象。但它将如何为对象赋值。假设我想像这样使用v3
:v3.somevariableafter之后,我想使用likev0.adjaciences=new Edge[]{new Edge(v1,distance[0][1])
@user2908533,你必须在一个循环中再做一次,最好与填充地图的循环相同。名为“v”+I
的对象的相邻对象是名为“v+(I+1)的对象
。您应该检查Map#get
的返回值是否为null。如果没有找到映射,它将返回null
。感谢您的回答,它正在工作,但它将如何为对象赋值。假设我想像这样使用v3
:v3.somevariable之后我想使用likev0.adjacencies=new Edge[]{new Edge(v1,distance[0][1])
@user2908533您必须在循环中再次执行此操作-最好与填充地图的循环相同。名为“v”+i
的对象的相邻对象是名为“v”+(i+1)的对象
。你应该检查Map#get
的返回值是否为null。如果没有找到映射,它将返回null
。感谢你的回答,它正在工作,之后我想使用像v0.appachencies=new Edge[]{new Edge(v1,distance[0][1])
你必须像Map.get(“v0”)那样做.adjacencies=…
。如果不操纵字节码,就真的无法实现您想要的。在这之后,我想使用likev0.adjacencies=newedge[]{newedge(v1,distance[0][1])
您必须像map.get(“v0”)那样做.adjacences=…
。如果不操纵字节码,就无法实现您想要的结果。
Vertex v0 = new Vertex("a");
Vertex v1 = new Vertex("b");
Vertex v2 = new Vertex("c");
Vertex v3 = new Vertex("d");
Vertex v4 = new Vertex("e");
Vertex v5 = new Vertex("f");