Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public final class z extends t {
public final String toString() {
return "" + this.a + "!=" + this.b;
}
public final void a(bw var1) {
this.a.a(var1);
Object var2 = var1.b;
this.b.a(var1);
Object var3 = var1.b;
if(var2 instanceof gh) {
if(var3 instanceof gh) {
var1.b = new gm(((gh)var2).a != ((gh)var3).a);
return;
}
if(var3 instanceof ex) {
var1.b = new gm(((gh)var2).a != ((ex)var3).a);
return;
}
if(var3 instanceof ha) {
var1.b = new gm(((gh)var2).a != ((ha)var3).a);
return;
}
if(var3 instanceof hh) {
var1.b = new gm((long)((gh)var2).a != ((hh)var3).a);
return;
}
if(var3 instanceof a) {
var1.b = new gm((float)((gh)var2).a != ((a)var3).a);
return;
}
} else if(var2 instanceof ex) {
if(var3 instanceof ex) {
var1.b = new gm(((ex)var2).a != ((ex)var3).a);
return;
}
if(var3 instanceof gh) {
var1.b = new gm(((ex)var2).a != ((gh)var3).a);
return;
}
if(var3 instanceof ha) {
var1.b = new gm(((ex)var2).a != ((ha)var3).a);
return;
}
if(var3 instanceof hh) {
var1.b = new gm((long)((ex)var2).a != ((hh)var3).a);
return;
}
if(var3 instanceof a) {
var1.b = new gm((float)((ex)var2).a != ((a)var3).a);
return;
}
} else if(var2 instanceof hh) {
if(var3 instanceof hh) {
var1.b = new gm(((hh)var2).a != ((hh)var3).a);
return;
}
if(var3 instanceof ex) {
var1.b = new gm(((hh)var2).a != (long)((ex)var3).a);
return;
}
if(var3 instanceof ha) {
var1.b = new gm(((hh)var2).a != (long)((ha)var3).a);
return;
}
if(var3 instanceof gh) {
var1.b = new gm(((hh)var2).a != (long)((gh)var3).a);
return;
}
if(var3 instanceof a) {
var1.b = new gm((float)((hh)var2).a != ((a)var3).a);
return;
}
} else if(var2 instanceof ha) {
if(var3 instanceof ha) {
var1.b = new gm(((ha)var2).a != ((ha)var3).a);
return;
}
if(var3 instanceof ex) {
var1.b = new gm(((ha)var2).a != ((ex)var3).a);
return;
}
if(var3 instanceof gh) {
var1.b = new gm(((ha)var2).a != ((gh)var3).a);
return;
}
if(var3 instanceof hh) {
var1.b = new gm((long)((ha)var2).a != ((hh)var3).a);
return;
}
if(var3 instanceof a) {
var1.b = new gm((float)((ha)var2).a != ((a)var3).a);
return;
}
} else if(var2 instanceof a) {
if(var3 instanceof a) {
var1.b = new gm(((a)var2).a != ((a)var3).a);
return;
}
if(var3 instanceof ex) {
var1.b = new gm(((a)var2).a != (float)((ex)var3).a);
полиморфизм? - не, не слышал.
даже не смотря на "защиту" от декомпиляции кода слегка доставил))
взято из декомпиленых кодов одной комэрчэской игры. http://twwk.ru/ - она самая
полагаю это либо протект от декомпиляции(т.е. чтобы не так просто было залесть и изменить чего-то там на свое усмотрение), либо для того, чтобы приложение минимум места занимало. т.к. приложение на телефон, то минимизация размера исполняемого файла непомешает. это как минимизация javascript кода - вроде мелочь но приятно.
public final class gz extends fv {
public static final fv a = new gz(1);
public static final fv b; // и тд. до n - вырезал ибо не суть
private int a;
protected gz() {}
private gz(int var1) {
this.a = var1;
}
// около десятока методов опустил
// суть:
static {
new gz(2);
new gz(3);
new gz(4);
new gz(5);
new gz(6);
new gz(7);
new gz(8);
new gz(9);
new gz(10);
new gz(11);
b = new gz(55);
c = new gz(62);
d = new gz(56);
e = new gz(63);
f = new gz(64);
g = new gz(57);
h = new gz(58);
new gz(65);
i = new gz(66);
j = new gz(67);
k = new gz(68);
l = new gz(71);
m = new gz(12);
n = new gz(13);
}
}
> декомпиленых кодов
Ну нашли что выкладывать... Еще бы выхлоп какого-нибудь flex'а или bison'а выложили, и искали в нем говно... Код всяко обработан чем-то в духе proguard'а (на что как бы намекают говорящие имена переменных), который любит поинлайнить и пообфусцировать.
Можно подумать, что с if-else оно смотрелось бы лучше 😉
Здесь проблема все-таки в независимости друг от друга пяти типов gh, ex, ha, hh, a. Они не имеют общего предка и не реализуют общих интерфейсов. Отсюда и n^2 веток.
Согласен про классы. Тем не менее, можно независимо получить значение var2.a за 5 if-else и var3.a за 5 if-else, а потом сравнить и присвоить. Количество ветвей получится линейным, а не квадратичным.
Это жабий енум 😉 Инфа 146%. Если интересно - скомпиль какой-нибудь enum сам, и посмотри на получившийся код.
Ну нашли что выкладывать... Еще бы выхлоп какого-нибудь flex'а или bison'а выложили, и искали в нем говно... Код всяко обработан чем-то в духе proguard'а (на что как бы намекают говорящие имена переменных), который любит поинлайнить и пообфусцировать.
Это не говно, это навоз.
Здесь проблема все-таки в независимости друг от друга пяти типов gh, ex, ha, hh, a. Они не имеют общего предка и не реализуют общих интерфейсов. Отсюда и n^2 веток.