有没有办法尽量减少这条线

时间:2016-11-15 09:54:39

标签: java

无论如何最小化代码行数以实现相同的目标

    L1.setFont(new Font("Serief", Font.BOLD, 24));
    L2.setFont(new Font("Serief", Font.BOLD, 24));
    L3.setFont(new Font("Serief", Font.BOLD, 24));
    L4.setFont(new Font("Serief", Font.BOLD, 24));
    L5.setFont(new Font("Serief", Font.BOLD, 24));
    L6.setFont(new Font("Serief", Font.BOLD, 24));
    L7.setFont(new Font("Serief", Font.BOLD, 24));
    L8.setFont(new Font("Serief", Font.BOLD, 24));

4 个答案:

答案 0 :(得分:23)

你可以做到

Stream.of(L1, L2, L3, L4, L5, L6, L7, L8).forEach(l -> l.setFont(serif));

在Java 8中,您可以编写

Sheet1

答案 1 :(得分:4)

其他答案都是正确的,但它们将您的设计问题视为给定。简单地说:我认为这是错误的。

重点是:一旦开始命名变量,如L1,L2,L3,......你正在做一些非常错误的事情。特别是当您的下一个想法是编写处理L1的特定代码和处理L2的代码时;等等。也许其他答案可以帮助您修复部分代码。但迟早,你会有许多不足的代码;所有人都以自己的方式处理那些Lx家伙。或者甚至不是那些标签,在这个程序中。但是你开始的其他一些代码却以低效的方式组织你的(UI)元素。

真正的解决方案:你应该使用某种收集机制; List;或者也许是一个普通的旧阵列。因为那时你可以迭代该集合,并且具有完全一个代码行,以同样的方式设置该集合中的所有元素。

或者相反:您查询包含其元素的所有标签的面板;如果元素与某个条件匹配,则根据需要更新其属性。如果您遵循该路径,您甚至可能不必在您自己的代码中保留对您的元素的任何引用&#34 ;;你只需使用已经存在的手段;并且可以像this一样简单。

我在说什么:其他解决方案中的所有好主意,但我认为它们走向了错误的方向。他们试图用好的想法修复破碎的apprach。要关注现在非常着名的mem:考虑这样的UI元素是,而不是宠物。含义:它们仅仅是数字"对您进行整理,以便能够以有效的方式(宠物)将整体作为个人,具有名称并作为& #34;单个实体"大部分时间。)

但只是添加我的简短版本;彼得的解决方案略有不同:

for (JLabel l : Arrays.asList( L1, L2, L3, L4, L5, L6, L7, L8 ))

也可以。

答案 2 :(得分:2)

归结为...... 4行; - )

setFont(new Font("Serief", Font.BOLD, 24), L1, L2, L3, L4, L5, L6, L7, L8);

private void setFont(Font font, Object... objects){
    for(Object object : objects){
        object.setFont(font);
    }
}

正如Hulk的评论中指出的那样,您应该将Object替换为您正在呼叫setFont的任何课程。

请记住,无论何时看到重复代码,您都可以经常用方法调用替换它。以下是有关重复代码错误原因的更多信息:https://en.wikipedia.org/wiki/Duplicate_code

答案 3 :(得分:2)

是创建一个名为setFont(Object ... values)的方法,并传递您需要设置字体的任意数量的对象。 以下是 JLabel 对象的示例。

void setFont(JLabel... jLabels){
    for(JLabel jLabel : jLabels){
        jLabel.setFont(new Font("Serif", Font.BOLD, 24));
    }
}

您可以将其称为

setFont(L1,L2,L3,L4); //any number of arguments