压缩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