Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
压缩Java代码_Java - Fatal编程技术网

压缩Java代码

压缩Java代码,java,Java,我已经完成了一个刽子手游戏的制作,我希望能够压缩代码,因为它的大部分内容都是重复的,只是略有不同 有没有一种简单的方法来压缩我的代码 // 'Info' label set text to 'Info' string InfoLabel.setText(InfoS); // 'Image' label set enabled to 'false' ImageLabel.setEnabled(false); // 'Char' text field set enabled to 'false' C

我已经完成了一个刽子手游戏的制作,我希望能够压缩代码,因为它的大部分内容都是重复的,只是略有不同

有没有一种简单的方法来压缩我的代码

// 'Info' label set text to 'Info' string
InfoLabel.setText(InfoS);
// 'Image' label set enabled to 'false'
ImageLabel.setEnabled(false);
// 'Char' text field set enabled to 'false'
CharTextField.setEnabled(false);
// 'Char' text field set focusable to 'false'
CharTextField.setFocusable(false);
// 'Play' button set enabled to 'false'
PlayButton.setEnabled(false);
// 'Play' button set focusable to 'false'
PlayButton.setFocusable(false);
// Char# labels set enabled to 'false'
Char0Label.setEnabled(false);
Char1Label.setEnabled(false);
Char2Label.setEnabled(false);
Char3Label.setEnabled(false);
Char4Label.setEnabled(false);
Char5Label.setEnabled(false);
Char6Label.setEnabled(false);
Char7Label.setEnabled(false);
Char8Label.setEnabled(false);
Char9Label.setEnabled(false);
// Alphabet labels set enabled to 'false'
ALabel.setEnabled(false);
BLabel.setEnabled(false);
CLabel.setEnabled(false);
DLabel.setEnabled(false);
ELabel.setEnabled(false);
FLabel.setEnabled(false);
GLabel.setEnabled(false);
HLabel.setEnabled(false);
ILabel.setEnabled(false);
JLabel.setEnabled(false);
KLabel.setEnabled(false);
LLabel.setEnabled(false);
MLabel.setEnabled(false);
NLabel.setEnabled(false);
OLabel.setEnabled(false);
PLabel.setEnabled(false);
QLabel.setEnabled(false);
RLabel.setEnabled(false);
SLabel.setEnabled(false);
TLabel.setEnabled(false);
ULabel.setEnabled(false);
VLabel.setEnabled(false);
WLabel.setEnabled(false);
XLabel.setEnabled(false);
YLabel.setEnabled(false);
ZLabel.setEnabled(false);
// 'PlayAgain' button set visible to 'true'
PlayAgainButton.setVisible(true);

上面是显示的java代码片段。

从这样一个一般性的问题很难说出来,但您应该寻找相似点,并找出这些“细微差别”在哪里:

  • 它们是重复的细微差别吗?(即,您在多个位置使用相同的稍有不同的值。)是否可以将它们封装为新类型中的状态
  • 您是否可以将这些差异指定为调用的新方法的参数,而不是现有的几乎重复的代码
基本上,寻找将几乎重复的代码提取到方法中的方法——首先关注识别共性和差异点,未来的方向应该更加清晰


编辑:在你给出的例子中,听起来你有很多单独的变量,它们都需要以类似的方式处理。考虑创建一个值的集合,而不是很多的个体变量。

从这样一个一般性的问题很难说出来,但是你应该寻找相似点,并找出那些“细微差别”在哪里:

  • 它们是重复的细微差别吗?(即,您在多个位置使用相同的稍有不同的值。)是否可以将它们封装为新类型中的状态
  • 您是否可以将这些差异指定为调用的新方法的参数,而不是现有的几乎重复的代码
基本上,寻找将几乎重复的代码提取到方法中的方法——首先关注识别共性和差异点,未来的方向应该更加清晰


编辑:在你给出的例子中,听起来你有很多单独的变量,它们都需要以类似的方式处理。考虑创建一个值集合,而不是很多单独的变量。

一般来说,应该使用代码参数从代码中提取一些细微差别。p> 从代码中,如果您有一个所有标签的列表,您可以执行以下操作

List<JLabel> labels = new ArrayList<JLabel>();
// ... add a your labels to this list when creating them

for (JLabel label : labels) {
    label.setEnabled(false);
    // do other initialisations
}
List labels=new ArrayList();
// ... 创建标签时,将标签添加到此列表中
用于(JLabel标签:标签){
label.setEnabled(false);
//做其他初始化
}

通常,您应该使用方法参数从代码中提取方法,以获得细微的差异

从代码中,如果您有一个所有标签的列表,您可以执行以下操作

List<JLabel> labels = new ArrayList<JLabel>();
// ... add a your labels to this list when creating them

for (JLabel label : labels) {
    label.setEnabled(false);
    // do other initialisations
}
List labels=new ArrayList();
// ... 创建标签时,将标签添加到此列表中
用于(JLabel标签:标签){
label.setEnabled(false);
//做其他初始化
}

数组方法

例如:

JLabel [] alphabet = new JLabel[26];
int c = 'a';
for(int i = 0; i < alphabet.length; i++){
    alphabet[i] = new JLabel(a++ + "");
    alphabet[i].setEnabled(false);
}
JLabel[]字母表=新的JLabel[26];
int c='a';
for(int i=0;i
数组方法

例如:

JLabel [] alphabet = new JLabel[26];
int c = 'a';
for(int i = 0; i < alphabet.length; i++){
    alphabet[i] = new JLabel(a++ + "");
    alphabet[i].setEnabled(false);
}
JLabel[]字母表=新的JLabel[26];
int c='a';
for(int i=0;i
另一种选择是使用反射

public void enableOnly(JLabel label) {
    try {
        for (Field f : getClass().getDeclaredFields()) {
            if (JLabel.class.isAssignableFrom(f.getType())) {
                JLabel label2 = (JLabel) f.get(this);
                label.setEnabled(label == label2);
            }
        }
    } catch (IllegalAccessException e) {
        throw new AssertionError(e);
    }
}

这有一个很好的特性,您可以向类中添加标签,而不必维护标签列表。

另一个选项是使用反射

public void enableOnly(JLabel label) {
    try {
        for (Field f : getClass().getDeclaredFields()) {
            if (JLabel.class.isAssignableFrom(f.getType())) {
                JLabel label2 = (JLabel) f.get(this);
                label.setEnabled(label == label2);
            }
        }
    } catch (IllegalAccessException e) {
        throw new AssertionError(e);
    }
}


这有一个很好的特性,您可以向类中添加标签,而无需维护标签列表。

除非您可以向我们显示代码,否则不能。您可以使用琼脂,琼脂是从天然增稠剂多糖中提取的凝胶物质:D@paranoid-抱歉,我之前已经把代码放进去了。另外,Java命名约定建议变量名以小写开头,类名以大写开头。例如,
JLabel someLabel=newjlabel()@paranoid android这会对我的代码产生负面影响吗?但是谢谢你的提示,我保证下次使用这个约定。除非你能给我们看你的代码。您可以使用琼脂,琼脂是从天然增稠剂多糖中提取的凝胶物质:D@paranoid-抱歉,我之前已经把代码放进去了。另外,Java命名约定建议变量名以小写开头,类名以大写开头。例如,
JLabel someLabel=newjlabel()@paranoid android这会对我的代码产生负面影响吗?但是谢谢你的提示,我会保证下次使用这个约定。对不起,我以为我以前把代码放进去了。我对Java开发相当陌生,我还没有了解到您之前提到的东西。对不起,我以为我以前已经把代码放进去了。我对Java开发相当陌生,我还没有了解到您之前提到的内容。好吧,使用上面的代码我将如何实现这一点,我想我理解您的意思,尽管我以前没有使用“for”。好吧,如果您以前没有使用
for
。。。你必须多学习。让这个程序保持原样,继续前进。学习和练习(小练习)。然后你会更有信心,你可以重构你的代码。重构:在不改变代码外部行为的情况下改变代码的内部结构。@helios谢谢,我现在已经完成了我的代码,我正在准备提交它,尽管它的当前状态大约有21页长。顺便说一下,要使用@Bedwyr的示例,你必须创建一个包含所有引用的标签列表。有几种方法可以做到这一点。这只是一种方法:
Label[]labelList=newlabel[]{ALabel,BLabel,CLabel,/*将其他标签放在这里*/}。好的,使用上面的代码我将如何实现这一点,我想我理解你的意思,尽管我以前没有使用过for。如果你没有使用
for