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的整数
有没有什么聪明的方法可以访问名为label+number的变量而不使用开关或一堆if-else?如果是,它是否比switch/if-elses方法更有效

我正在为Java添加标签,但我认为这对于任何经典语言来说都是一个有趣的问题。

您可以使用它,但它会受到性能差的影响,或者您可以使用使用对象预计算的
映射来完成

对于更一般的情况,反射可能是您想要的

反射用法的简单示例:

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语句,它可能会做到。