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

    +60

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    class Test {
        private int m_field;
    
        int getField() {
            return m_field;
        }
    
        void setField(int field) {
            m_field = field;
        }
    }

    Дискасс.

    Запостил: bormand, 23 Августа 2012

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

    • Читай спеку java beans.
      Если интроспекция не нужна, то можешь называть как хочешь.
      Но по-моему там можно как-то было обходить эти ограничения.
      Если написать int field; то вроде и тут интроспекция бинов будет работать.
      Ответить
      • По умолчанию интроспекция работает по именам и сигнатурам методов, поля не имеют значения. В теории можно называть методы как хочешь, но тогда для них придётся указывать дескриптор.
        Ответить
        • Понятно, т.е. либы мои переменные читать не будет, это радует. Ну тогда еще такой вопрос к опытным программистам на Яве. Кто-нибудь пишет m_field и s_field для статиков, или же все пользуются this.field и Test.field, а m_* это крестоблядская ересь?
          Ответить
          • Для final статиков пишут FIELD.
            Ответить
            • > Для статиков пишут FIELD.
              Даже для не final static'ов? Мне казалось, что так только final static константы называют.
              Ответить
              • Какой ты быстрый! Я только исправил.
                > же все пользуются Test.field
                Да. Желательно. Там свои подводные камни кстати есть.
                >а m_* это крестоблядская ересь?
                Вопрос религии. Скорее нет, чем да.
                _* лично я ересью не щитаю.
                Ответить
                • > Там свои подводные камни кстати есть.
                  Какие, если не секрет?
                  Ответить
                  • Да ну это не оносится к топику, но раз спгашиваете, то вот вам майдфак:
                    public class Main {
                        public static void main(String[] args){
                            System.out.println(X.Y.Z);
                        }
                    }
                    
                    class X {
                        static class Y {
                            static String Z = "Zzzz";
                        }
                        static C Y = new C();
                    }
                    
                    class C {
                        String Z = "Other Zzz!";
                    }

                    Что буит на экране?
                    Ответить
                    • Для любителей жабы и ideone вопрос: как получить доступ к статику внутри класса Y?
                      Ответить
                      • http://ideone.com/KestD
                        Вот так? Или есть более красивое решение этой задачки?
                        Ответить
                        • 2 Lennis,bormand
                          Читеры вы. У одного объект лишний, у второго класс.
                          System.out.println(((X.Y)null).Z);
                          Ответить
                          • Напомнило фрагмент из исходников Qt:
                            reinterpret_cast<T>(0)->staticMetaObject
                            Ответить
                          • http://ideone.com/7vIv5
                            А так слабо? ;)

                            P.S. Блин, все равно работает ;(
                            Ответить
                      • Еще такой вариант:
                        public class Main {
                        public static C Y=new C();
                        public static class Y{
                        public static String Z="Win";
                        }
                        public static void main(String[] args)throws IllegalArgumentException, IllegalAccessException, SecurityException{
                        System.out.println(Main.class.getClasses ()[0].getFields()[0].get(null));
                        }

                        }
                        class C{
                        static String Z="Loose";
                        }
                        Ответить
                        • Рефлексия - нечестно, да и индексы - непонятно.
                          А еще можно так.
                          public class Main {
                              public static <xy extends X.Y>void main(String[] args){
                                  System.out.println(xy.Z);
                              }
                          }
                          
                          class X {
                              static class Y {
                                  static String Z = "Zzzz";
                              }
                              static C Y = new C();
                          }
                          
                          class C {
                              String Z = "Other Zzz!";
                          }

                          Типа import static но с алиасом и на метод. Часто пишу так вместо него.
                          Ответить
                    • а оно скомпилится?
                      Ответить
          • http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
            A variable's name can be any legal identifier — an unlimited-length sequence of Unicode letters and digits, beginning with a letter, the dollar sign "$", or the underscore character "_". The convention, however, is to always begin your variable names with a letter, not "$" or "_". Additionally, the dollar sign character, by convention, is never used at all. You may find some situations where auto-generated names will contain the dollar sign, but your variable names should always avoid using it. A similar convention exists for the underscore character; while it's technically legal to begin your variable's name with "_", this practice is discouraged. White space is not permitted.
            Ответить
    • А что дискас, это автосгенерированный код C#. Оно, вроде как, даже в нём скомпилится :)
      Ответить
    • readonly )
      Ответить
    • показать все, что скрытоvanished
      Ответить

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