public void onClick(View v) {
//this contains 4,095 if conditions
}
代码是不可执行的,因为它说:
Multiple markers at this line
-implements android.view.View.OnClickListener.onClick
-The code of method onClick(View) is exceeding the 65535 bytes limit
任何人都可以帮我解决这个问题吗?因为我的代码中实际上需要那些4,095。
答案 0 :(得分:2)
如果你想保留4095 if语句,那么我会做这样的事情:
@Override
public void onClick(View v) {
if (! processPart1(v)) {
processPart2(v);
}
}
private boolean processPart1(View v) {
if (q1.isChecked() && !q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) {
// do your thing
return true;
}
else if (!q1.isChecked() && q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) {
// do your thing
return true;
}
// more conditions here...
return false;
}
private void processPart2(View v) {
// more conditions
}
但是,你可以更快地实现这一点,也更容易模块化:
boolean q[] = {q1.isChecked(), q2.isChecked(), q3.isChecked(),
q4.isChecked(), q5.isChecked(), q6.isChecked(),
q7.isChecked(), q8.isChecked(), q9.isChecked(),
q10.isChecked(), q11.isChecked(), q12.isChecked()};
int value = 0;
for (int i = 0, len = q.length; i < len; i++) {
value += (q[i] ? 1 : 0) << i;
}
switch(value) {
case 0: // do your thing
case 1: // do your thing
case 2: // do your thing
// more case statements ...
}
虽然你的代码必须通过2048 if if语句平均上面的代码只处理12个值,然后直接跳转到正确的case语句。它也更不容易出错,可以很容易地分成不同的方法:
processValues0To1023(value);
processValues1024To2047(value);
processValues2048To3071(value);
processValues3072To4095(value);
private void processValues0To1023(int value) {
switch(value) {
case 0: // do your thing
// more case statements ...
}
}
private void processValues1024To2047(int value) {
switch(value) {
case 1024: // do your thing
// more case statements ...
}
}
private void processValues2048To3071(int value) {
// ditto
}
private void processValues3072To4095(int value) {
// ditto
}