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

    +83

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    class o{
    	public  o o(o o){
    			return o;
    	}
    }

    Может не в тему, но выглядит забавно.

    Запостил: levsha128, 02 Февраля 2012

    Комментарии (28) RSS

    • Код хоть рабочий? о_о
      Ответить
      • > member names cannot be the same as their enclosing type
        что вполне логично, т.к. метод с именем класса - это конструктор, у него нет return. Поэтому - не скомпилица.
        Ответить
        • Я потому и запостил что оно компилица без ошибок.
          class o{
          public static o o(o o){
          return o;
          }
          }
          public class App {

          public static void main(String[] args) {
          o a;

          }

          }
          Ответить
    • Вроде компилица, хотя:
      class o{
      public static o o(o o){
      return o;
      }
      }
      public class App {

      public static void main(String[] args) {
      o a;
      a = new o(a);
      }

      }

      не хочет, пишет что конструктор не определен.
      Ответить
      • дык конструктор не может возвращать значения. У класса в топике просто есть метод, чьё имя совпадает с названием класса.
        Ответить
        • в джаве можно создать метод с именем класса и это не будет конструктор ?
          Ответить
          • да
            Ответить
            • Омг.
              Ответить
              • а что собственно такого?
                Ответить
              • Почему ОМГ?
                Я вот вообще считаю, что крестовая мода делать именем конструктора имя класса - неудобно, удобнее одно зарезервированное слово на все типы. Например, init
                Ответить
                • Писать 'имя класса', а потом еще init?
                  Ответить
                  • да, он хочет не T(constructor args), а T::__init__(constructor args)

                    но если оставить совместимость с вызовом конструктора в виде Type(...), то единые названия для любых конструторов в самом деле удобней - при переименовании класса не надо переименовывать все конструторы
                    Ответить
                    • >при переименовании класса не надо переименовывать все конструторы
                      не совсем понял. имя класса же всё равно упоминается при вызове конструктора.
                      Ответить
                      • В Питоне (__init__) и HaXe (new) так, так же было в PHP4 (__construct если я правильно помню). А то что вы потом делаете new <имя класса>, так вы все равно вызываете функцию, не ту, что вы написали, а что-то, что компилятор сгенерировал, а она уже вызывает конструктор. Потому что нужно проинициализировать поля класса, если у них есть какие-то начальные значения и т.п. А компилятор мог бы и сам догадаться с каким именем генерировать функцию-конструктор. Меньше рефакторинга - всегда хорошо. Конечно, маловероятно, но а вдруг сильно захочется, чтобы имя метода было таким же, как и имя класса (может вы их динамически создаете - мало ли).
                        Ответить
                        • > маловероятно, но а вдруг сильно захочется, чтобы имя метода было таким же
                          markdown.markdown("Hello\n=====")
                          Ответить
                    • А еще можно пользоваться рефракторингом в современных иде и не думать о таком.
                      Ответить
      • а код в комменте вообще непонятно что собирается тестировать: конструктора с параметром же не определено.
        Ответить
    • class o<O,o>{
          public <O,o> o o(O o){
              return (o)o;
          }
      }
      Ответить
      • Аааааааай, красава! Только хотел свой похожий вариант предложить :)
        Ответить
      • Пользоваться так что ли:

        new o<o,o>().o(new o<o,o>());
        Ответить
    • рак мозга от чрезмерного удивления
      Ответить
    • Теперь я знаю, какого оператора мне не хватало в Брейнфаке!
      Ответить
    • Тёма уже был без сознания - его лицо покрыла смертельная бледность, а губы посинели. Руслан взял его за руку - сердцебиение было слабым, пульс еле прощупывался. Он стал трясти брата, бить по щекам, крича:
      Ответить

    Добавить комментарий