MVN幻数开关

问题描述 投票:2回答:1

我已经使用Checkstyle一段时间了,知道什么是幻数,但是我从未以这种方式遇到过它,它只是一个分配数据的开关,但是这些案例被标记为幻数,我无法使它们决赛或类似的事情(我知道)。我创建的程序获取一个随机数(从0到199的整数),并在开关中使用它,不仅如此,而且在ra.nextInt(200)中也使用了200。也是“魔术”。

我的问题是,如何在不声明200个新变量的情况下防止案例滥用魔术数字?

这是我的代码:

public Basura selectB(final Basura b) {

        private Random ra = new Random();

        ran = ra.nextInt(200);

        switch (ran) {
            case 0: b.setName("Funko Roto");
                b.setClasification("PL"); break;
            case 1: b.setName("Bateria de Laptop");
                b.setClasification("B"); break;
            case 2: b.setName("Sobras de Comida");
                b.setClasification("O"); break;
            case 3: b.setName("Clips de Oficina");
                b.setClasification("M"); break;
            case 4: b.setName("Colcha Deshilachada");
                b.setClasification("T"); break;
            case 5: b.setName("Disco DVD");
                b.setClasification("B"); break;

             ...

            default:b.setName("ERROR");
                b.setClasification("E"); break;
        }

        return b;
    }
java maven switch-statement checkstyle magic-numbers
1个回答
0
投票

您可以将此事物列表外部化为文本文件,并使程序将文件内容读取到数组中。您可以将其放置在代码中的硬编码位置,或配置位置,也可以将其放置在类路径(如果使用maven约定,则为src / main / resources),然后使用Class.getResourceAsStream读取它。 >

将分类与名称存储在同一行,并用定界符分隔,例如:

Sobras de Comida|O
Colcha Deshilachada|T

等数组长度是传递给nextInt的值。

文件的内容被加载到数组中。摆脱开关,并使用随机值索引数组以获取您的字符串。然后,您可以分割字符串并在要返回的pojo上设置字段。

[采用这种方法:

  • 没有魔术数字。

  • 更容易更新列表。

  • 您可以删除一堆重复的低价值代码。

© www.soinside.com 2019 - 2024. All rights reserved.