-
+70
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
public class MyFancyException extends Exception {
public MyFancyException(Throwable cause) {
super(cause);
}
static public <X extends Throwable> void foo() throws X {
try {
throw new MyFancyException(new Exception());
}
catch (MyFancyException ex) {
throw (X) ex.getCause();
}
}
public static void main(String[] args) throws IOException {
MyFancyException.<IOException>foo();
}
}
Прекрасный способ отстрелить себе ногу. Метод foo() может кинуть любое исключение, даже если его нет в списке throws
aspid812,
27 Июня 2014
-
+75
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
protected String createPublicCacheKey(String...keyElements) {
String initial = "public";
StringBuilder format = new StringBuilder();
format.append(initial);
for(int i=0;i<keyElements.length;i++) {
format.append(".%s");
}
return String.format(format.toString(), keyElements);
}
Объясните, позязя, почему нельзя сразу добавлять данные к StringBuilder'у. Может быть в этом есть скрытый сакральный смысл желание выпендриться знанием JDK.
kostoprav,
27 Июня 2014
-
+75
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws Exception {
Class cache = Integer.class.getDeclaredClasses()[0];
Field c = cache.getDeclaredField("cache");
c.setAccessible(true);
Integer[] array = (Integer[]) c.get(cache);
array[132] = array[133];
System.out.printf("%d",2 + 2);
}
}
Джаважды джва равно пять
http://ideone.com/1Ap0wW
TarasB,
25 Июня 2014
-
+72
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
private static String fetchEventName(LogEventTypes event) {
String result = null;
if (LogEventTypes.A.name().equals(event.name()))) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.B.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.C.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.D.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.E.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.F.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.G.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.H.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.I.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.J.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.K.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
} else if (LogEventTypes.L.name().equals(event.name())) {
result = play.i18n.Messages.get("...");
}
return result;
}
Секретную инфу потер :) Но думаю, и так все ясно... LogEventTypes - у нас enum.
Код писал индус (нет ну правда, индус).
kostoprav,
24 Июня 2014
-
+75
- 1
- 2
- 3
- 4
- 5
- 6
HostInfo info = null;
if (info == null)
return;
info.setOsName(os);
Выдержка из достаточно серьезного проекта
SkiFF,
24 Июня 2014
-
+78
- 1
public static final String TimeoutInMilliseconds = "timeoutInSeconds";
Нашел в константах нашего проекта. Существовало и ежедневно использовалось в течение 8 месяцев. Глянул историю - создано и редактировалось только мной. Фейспалм.
mdcool,
23 Июня 2014
-
+80
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
public class CookieHelper {
public static Cookie getCookie(String name, Http.Request request) {
Cookie cookie = null;
if (request.cookies != null) {
for (Entry<String, Cookie> entry : request.cookies.entrySet()) {
if (name.equals(entry.getKey())){
cookie = entry.getValue();
}
}
}
return cookie;
}
}
request.cookies - это конечно же Map<String, Cookie>
kostoprav,
23 Июня 2014
-
+80
- 1
private HttpClient httpServer = new DefaultHttpClient();
У нас в приложении есть свой сервер!!1
javahutt,
21 Июня 2014
-
+75
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount()==0 || getSupportFragmentManager().getBackStackEntryCount()==1) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
((MainActivity)instance).onDestroy();
}
}
/* чуть дальше */
JSONObject jsonObjectA = null, jsonObjectB = null;
try {
jsonObjectA = new JSONObject(a.toString());
jsonObjectB = new JSONObject(b.toString());
} catch (JSONException e1) {
e1.printStackTrace();
}
if ((jsonObjectA != null || jsonObjectB != null) || (jsonObjectA != null && jsonObjectB != null)) {
try {
valA = jsonObjectA.getString("name");
valB = jsonObjectB.getString("name");
} catch (JSONException e) {
e.printStackTrace();
}
}
Первый фрагмент кода - это больше специфика Android - при нажатии кнопки назад: закрыть приложение, убить процесс и дернуть метод onDestroy() который в норме должен автоматом вызваться при закрытии приложения но не вызывается из-за того что мы убиваем процесс. Про то что условие if можно оптимизировать я умолчу.
На if() во втором фрагменте заглючил даже встроенный в intelliJ Idea инструмент рефакторинга...
TAX,
20 Июня 2014
-
+73
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
// Current Month Days
for (int i = 1; i <= _nDaysInMonth; i++) {
if (_myPrefs.getIfConfigured()) {
if (_regionWithHolidays != null && _regionWithHolidays.length > 0) {
String holidayDateStringFormat = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
for (int index = 0; index < _regionWithHolidays.length; index++) {
if (_regionWithHolidays[index].getHolidayDate().equals(holidayDateStringFormat)) {
list.add(String.valueOf(i) + "-RED" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
}
}
}
}
if (i == getCurrentDayOfMonth()) {
list.add(String.valueOf(i) + "-BLUE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
} else {
list.add(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
if (_myPrefs.getIfConfigured()) {
if (_regionWithHolidays != null && _regionWithHolidays.length != 0) {
String otherDates = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
for (int index = 0; index < _regionWithHolidays.length; index++) {
if (_regionWithHolidays[index].getHolidayDate().equals(otherDates)) {
list.remove(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
}
}
}
}
}
}
// some code
for (int i = 1; i <= _nDaysInMonth; i++) {
String[] day_color = list.get(i).split("-");
if (day_color[1].equals("WHITE")) {
//active dates in current month
dayNumberView.setTextColor(getResources().getColor(R.color.darkGrey_font));
} else if (day_color[1].equals("BLUE")) {
//current date in current month
holder.tvTime.setTextColor(getResources().getColor(R.color.whitetranslucent));
dayNumberView.setTextColor(getResources().getColor(R.color.whitetranslucent));
cell.setBackgroundResource(R.color.blue_font);
} else if (day_color[1].equals("RED")) {
//active dates in current month
dayNumberView.setTextColor(getResources().getColor(R.color.red));
}
}
Это приложение с десятками тысяч пользователей. Мне выпала честь править в нем баги. На сколько я могу судить задача этого куска была отобразить календарь на текущий месяц на экране и подсветить WHITE - обычные дни, BLUE - текущий, RED - выходные и праздничные. Итак в чем соль:
1) сама соль метода - в одном цикле создается список строк вида НОМЕР-ЦВЕТ-МЕСЯЦ-ГОД, чуть ниже в аналогичном цикле эти строки разбиваются по "-" и сравнивается по строковому значению цвета. Кроме того день может быть или текущим или праздничным, но никак не одновременно.
2) два практически одинаковых куска кода по 10 строк - строки 4-13 и 19-28, первый при определенных условия добавляет ПРАЗДНИЧНЫЙ день в календарь, потом день в 16-18 строках день всегда добавляется еще раз этот день, либо обычный(WHITE) либо текущий(BLUE), и выполняется второй кусок и если проходят те же условия т.е. фактические если был добавлен праздничный день(RED) то удаляется добавленный ОБЫЧНЫЙ день. Баг был в том что если текущий день был еще и праздничным то они задваивались. Сделать по нормальному - если день уже добавлен, не добавлять еще раз или сделать continue главному циклу. Не говоря уже о том чтобы добавить break после 9 строки, видно автор не знал про эти операторы.
TAX,
19 Июня 2014