Java 有没有办法减少这方面的工作量

Java 有没有办法减少这方面的工作量,java,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("S

有没有办法减少代码行数以达到同样的效果

    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));
你可以

Font serif = new Font("Serif ", Font.BOLD, 24);
for (JLabel l : new JLabel[] { L1, L2, L3, L4, L5, L6, L7, L8 })
    l.setFont(serif);
在Java8中,您可以编写

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

归结到。。。4行;-)

正如Hulk在评论中指出的那样,您应该将
Object
替换为调用
setFont
的任何类


请记住,每当您看到重复的代码时,通常可以用方法调用替换它。这里有一些关于为什么重复代码不好的更多信息:

是创建一个名为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

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

要点是:一旦开始命名L1、L2、L3等变量。。。你做错了什么事。特别是当你的下一个想法是编写处理L1的特定代码和处理L2的代码时;等等也许其他答案可以帮助您修复代码的这一部分。但迟早,你会有很多有缺陷的代码;所有人都以自己的方式和Lx的人打交道。或者在这个程序中,甚至可能没有那些标签。但在其他代码中,您一开始就犯了同样的错误,即以低效的方式组织(UI)元素

这里的real解决方案是:您应该使用某种收集机制;要么是a;或者可能是一个普通的旧数组。因为这样您就可以迭代该集合,并使用一行代码以相同的方式设置该集合中的所有元素

反之亦然:查询包含其元素的所有标签的面板;如果一个元素匹配某个条件,那么您可以根据需要更新它的属性。如果您遵循该路径,您甚至可能不必在“自己的代码”中保留对元素的任何引用;你只是使用已经存在的手段;也可以简单地说

我想说的是:其他解决方案中都有不错的想法,但我认为它们走错了方向。他们试图用好的想法来修复一个坏的方法。遵循现在相当有名的MEM:考虑这样的UI元素是<强>牛<强>,而不是<强>宠物< /强>。意思是:它们对你来说仅仅是“数字”,你可以组织起来,这样它们就可以作为一个整体高效地访问(相对于一只被视为个体、有名字、大部分时间被称为“单一实体”的宠物而言)

但我只想加上我的简短版本;彼得溶液的一个微小变化:

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

也行。

把它分组到
列表中怎么样<代码>用于(WhateverThisClassIs项:whateverThisClassIslist){item.setFont(…);
?它不是Serif而不是Serief吗?为什么?在这种情况下,只创建一个
Font
对象而不是八个对象(以及正确拼写“Serif”)更为重要.Side note:阅读java命名约定。字段/变量名不符合要求;更糟糕的是:节省“键入工作”绝对没有意义“通过将自己限制为单字符名称!当然,这个问题似乎属于,
对象
必须替换为实际具有
setFont
-方法的类型,以便进行此编译-可能值得更改为其他类型,以避免初学者混淆。
for (JLabel l : Arrays.asList( L1, L2, L3, L4, L5, L6, L7, L8 ))