Java 访问名为variablename+;数字
我一直在想:Java 访问名为variablename+;数字,java,variables,Java,Variables,我一直在想: 例如,如果我有8个名为label1、label2、label3的JLabel 我收到一条消息,显示在其中一条消息中,以及一个从1到8的整数 有没有什么聪明的方法可以访问名为label+number的变量而不使用开关或一堆if-else?如果是,它是否比switch/if-elses方法更有效 我正在为Java添加标签,但我认为这对于任何经典语言来说都是一个有趣的问题。您可以使用它,但它会受到性能差的影响,或者您可以使用使用对象预计算的映射来完成 对于更一般的情况,反射可能是您想
- 例如,如果我有8个名为label1、label2、label3的JLabel
- 我收到一条消息,显示在其中一条消息中,以及一个从1到8的整数
映射来完成
对于更一般的情况,反射可能是您想要的
反射用法的简单示例:
public class TestSomething {
public int elem1 = 1;
public int elem2 = 2;
public int elem3 = 3;
public int elem4 = 4;
public static void main(String[] str) throws NoSuchFieldException,IllegalAccessException {
TestSomething test = new TestSomething();
int num = 3;
Field field = test.getClass().getField("elem" + num);
System.out.println(field.get(test));
}
}
您可以使用它,但它的性能会很差,或者您可以使用使用对象预先计算的映射来执行
对于更一般的情况,反射可能是您想要的
反射用法的简单示例:
public class TestSomething {
public int elem1 = 1;
public int elem2 = 2;
public int elem3 = 3;
public int elem4 = 4;
public static void main(String[] str) throws NoSuchFieldException,IllegalAccessException {
TestSomething test = new TestSomething();
int num = 3;
Field field = test.getClass().getField("elem" + num);
System.out.println(field.get(test));
}
}
您应该将标签放在(或a)中。您应该将标签放在(或a)中。您可以使用反射:
e、 g
反射不是特别快,但非常灵活。对于您的示例,使用switch语句可能会获得最佳性能。您可以使用反射:
e、 g
反射不是特别快,但非常灵活。对于您的示例,使用switch语句可能会获得最佳性能。为什么不使用数组JLabel[]label
?然后可以使用标签[x-1]
(x是1到8)访问它们。为什么不使用数组JLabel[/code>?然后您可以使用标签[x-1]
(x是1到8)来访问它们。很好的答案:)无论如何,一个switch语句应该有多少个检查(大约)比反射性能差?映射是否也比交换机差(只是不如反射差)?@RomandGz:很难估计需要多少交换机才能获得比反射差的性能,因为反射的一个缺点是jvm优化,而使用反射时不会进行优化。对于Map
解决方案:请注意,如果使用HashMap
,则搜索时间为O(1)
,这对于switch语句是不正确的。然而,我认为这些微观优化很少是一个考虑因素,因为性能上的差异通常很小。可读性通常应该是选择其中一个的考虑因素。因此,如果我理解的话,HashMap应该比switch语句快?@RomandGz:对于非常多的switch语句,它可能会做到。很好的答案:)不管怎样,有多少检查(大约)switch语句必须具有比反射更差的性能吗?映射是否也比交换机差(只是不如反射差)?@RomandGz:很难估计需要多少交换机才能获得比反射差的性能,因为反射的一个缺点是jvm优化,而使用反射时不会进行优化。对于Map
解决方案:请注意,如果使用HashMap
,则搜索时间为O(1)
,这对于switch语句是不正确的。然而,我认为这些微观优化很少是一个考虑因素,因为性能上的差异通常很小。可读性通常应该是选择其中一个语句的考虑因素。因此,如果我理解的话,HashMap应该比switch语句快?@romardgz:对于数量非常多的switch语句,它可能会做到。