1. Java / Говнокод #17066

    +79

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    Object o1 = true ? Integer.valueOf(1) : Double.valueOf(2.0);
    Object o2;
    
    if (true) {
    	o2 = Integer.valueOf(1);
    } else {
    	o2 = Double.valueOf(2.0);
    }
    
    System.out.println(o1);
    System.out.println(o2);

    Такие вот в Java интересные типы-обёртки.

    Проверить себя: http://ideone.com/BrhREq

    Источник: http://java.dzone.com/articles/10-things-you-didnt-know-about

    someone, 05 Ноября 2014

    Комментарии (79)
  2. Java / Говнокод #17006

    +71

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    protected boolean valid_move(int from, int to, int aBoard[], int colorfor) {
      if(plainType(colorfor) == userColor) {
        return (to>=0 && to<=35 && from >=0 && from<=35 && plainType(aBoard[from])==colorfor && aBoard[to]==emptyType 
                && ((from-to == 4 || from-to==5) 
                    || ((from-to == 10 && plainType(aBoard[from-5])==oppositeType(colorfor)) 
                        || (from-to == 8 && plainType(aBoard[from-4])==oppositeType(colorfor))) 
                    || (aBoard[from]==kingType(colorfor) 
                        && ((to-from == 4 || to-from==5) 
                            || ((to-from == 10 && plainType(aBoard[from+5])==oppositeType(colorfor)) 
                                || (to-from == 8 && plainType(aBoard[from+4])==oppositeType(colorfor)))))));
      }
      else {
        return (to>=0 && to<=35 && from >=0 && from<=35 && plainType(aBoard[from])==colorfor && aBoard[to]==emptyType 
                && ((to-from == 4 || to-from==5) 
                    || ((to-from == 10 && plainType(aBoard[from+5])==oppositeType(colorfor)) 
                        || (to-from == 8 && plainType(aBoard[from+4])==oppositeType(colorfor))) 
                    || (aBoard[from]==kingType(colorfor) 
                        && ((from-to == 4 || from-to==5) 
                            || ((from-to == 10 && plainType(aBoard[from-5])==oppositeType(colorfor)) 
                                || (from-to == 8 && plainType(aBoard[from-4])==oppositeType(colorfor))))))); // =)))))
      }
    }

    https://github.com/haiming020/BBS-AKB48/blob/master/src/Checkers.java

    zadrot, 01 Ноября 2014

    Комментарии (5)
  3. Java / Говнокод #16933

    +76

    1. 1
    2. 2
    3. 3
    ArrayAdapter<String> alerts = new ArrayAdapter<String>(getActivity(),
    				R.layout.spinner_item, time);
    		if (alerts != null) { ... }

    andrew91, 24 Октября 2014

    Комментарии (2)
  4. Java / Говнокод #16915

    +121

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (Ints.contains(new int[] { 4, 5 }, statusCode / 100)) {
    	// error response
    } else {
    	// success response
    }

    Насколько я знаю, Apache HTTP Client не содержит "официального" метода для определения категории кода состояния. Приходится так.

    someone, 23 Октября 2014

    Комментарии (13)
  5. Java / Говнокод #16913

    +117

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    @Override
    public void afterPersistenceInit() {
    	val conn = emProvider.get().unwrap(Connection.class);
    
    	try {
    		log.info("Transaction isolation level: {}", getLevelString(conn.getTransactionIsolation()));
    	} catch (final SQLException e) {
    		log.error("Error getting transaction isolation level", e);
    	}
    }
    
    private String getLevelString(final int isolationLevel) {
    	// Poor man's enums. Use reflection to find a constant with the given value
    	try {
    		for (val maybeLevelConstant: Connection.class.getDeclaredFields()) {
    			if (maybeLevelConstant.getType() == int.class && maybeLevelConstant.getName().startsWith("TRANSACTION_")
    					&& maybeLevelConstant.getInt(null) == isolationLevel) {
    				return maybeLevelConstant.getName();
    			}
    		}
    	} catch (final IllegalArgumentException | IllegalAccessException e) {
    		return "UNKNOWN";
    	}
    	
    	return "UNKNOWN";
    }

    Ищем рефлексией константу с нужным значением. И всё для того, чтобы напечатать её в логе. Вот что крест животворящий отсутствие энумов в legacy API делает.

    someone, 23 Октября 2014

    Комментарии (6)
  6. Java / Говнокод #16909

    +86

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    public PriceComparator {
    
       private PriceComparator INSTANCE;
    
        public PriceComparator() {
            INSTANCE = this;
        }
    
        public PriceComparator getInstance() {
            return INSTANCE;
        }
    
    ...
    }

    Singleton fail...

    StanDalone, 22 Октября 2014

    Комментарии (7)
  7. Java / Говнокод #16893

    +117

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    @Nullable
    public static BigDecimal getWidth(final ITagSpecification spec, final TagSize size) {
    	switch (size) {
    	case S:
    		return spec.getSmallWidth();
    	case M:
    		return spec.getMediumWidth();
    	case L:
    		return spec.getLargeWidth();
    	default:
    		throw new AssertionError();
    	}
    }
    
    @Nullable
    public static BigDecimal getHeight(final ITagSpecification spec, final TagSize size) {
    	switch (size) {
    	case S:
    		return spec.getSmallHeight();
    	case M:
    		return spec.getMediumHeight();
    	case L:
    		return spec.getLargeHeight();
    	default:
    		throw new AssertionError();
    	}
    }
    
    public static BigDecimal getDiameter(final ITagSpecification spec, final TagSize size) {
    	switch (size) {
    	case S:
    		return spec.getSmallDiameter();
    	case M:
    		return spec.getMediumDiameter();
    	case L:
    		return spec.getLargeDiameter();
    	default:
    		throw new AssertionError();
    	}
    }
    
    @Nullable
    public static BigDecimal getWeight(final ITagSpecification spec, final TagSize size) {
    	switch (size) {
    	case S:
    		return spec.getSmallWeight();
    	case M:
    		return spec.getMediumWeight();
    	case L:
    		return spec.getLargeWeight();
    	default:
    		throw new AssertionError();
    	}
    }

    Бойлерплейт - он такой. А можно ли с JPA это как-то изящнее сделать? Дело в том, что {small|medium|large}{Width|Height|Diamet er|Weight} - это двенадцать столбцов таблицы в БД. Пока единственное, что приходит на ум - это сделать три одинаковых @Embedded'а на каждый размер.

    someone, 19 Октября 2014

    Комментарии (6)
  8. Java / Говнокод #16840

    +119

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    static void writeInternal(byte type, Object object, ObjectOutput out) throws IOException {
        out.writeByte(type);
        switch (type) {
            case DURATION_TYPE:
                ((Duration) object).writeExternal(out);
                break;
            case INSTANT_TYPE:
                ((Instant) object).writeExternal(out);
                break;
            ...
            <snip>
            ...
            case PERIOD_TYPE:
                ((Period) object).writeExternal(out);
                break;
            default:
                throw new InvalidClassException("Unknown serialized type");
        }
    }

    JDK 8. java.time.Ser.

    Вот что происходит, когда в языке есть только public-наследование. Без рефлексии короче написать нельзя.

    someone, 12 Октября 2014

    Комментарии (10)
  9. Java / Говнокод #16831

    +84

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    private static final int INT_5 = 5;
    private static final int INT_3 = 3;
    private static final int INT_4 = 4;
    private static final int INT_6 = 6;
    private static final int INT_7 = 7;
    private static final int INT_8 = 8;

    xaoc, 09 Октября 2014

    Комментарии (22)
  10. Java / Говнокод #16829

    +133

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /**
    	 * return angle of otrezok near the center, with circle point as a second part of the otrezok
    	 * 
    	 * @param center
    	 * @param circlePoint
    	 * @param len
    	 * @return
    	 */

    someone, 09 Октября 2014

    Комментарии (7)