Jawa / Говнокод #11977 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
public static 
	String readFile(String file) {
		return Read.file(  Reflection.getCallerClass(2), file,"\n");
	}
	public static 
	String readFile(Class c, String file, final String lineBreaker) {
		return Read.stream(c.getResourceAsStream(file),lineBreaker);
	}

Я уже как-то раз наступил на эту хрень.
Но ничё - сегодня снова вот решил написать - удобно ведь.

Запостил: 3.14159265 3.14159265, (Updated )

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

  • Ох я как-то раз с этим sun.reflect.Reflection страшно себе в ногу выстрелил - не описать.
    А всё из-за желания секономить 1 параметр при вызове фабрики.
    Ответить
  • Как мне теперь это развидеть?
    Я по умолчанию использую контекстный загрузчик классов...
    Ответить
    • Зато у меня фабрика даже без параметров, сама знает какой объект отдать.
      Ответить
        • метод использует информацию о типе того, кто его вызывает, для того, чтобы понять, откуда грузить ресурс
          Ответить
          • Мне это напоминает:
            >метод использует информацию о типе того, кто его вызывает, для того, чтобы понять, в какую ногу стрелять.

            Впрочем, у кого что болит...
            Ответить
            • Просто как-то раз один Тарас...
              давал сцылку на геймдев где предлагал программу с процедурами, которые ничего не возвращают.
              А вот я тут подумал - если и аргументы тоже не передавать.

              Ну и по старой-доброй традиции - расчет факториала без параметров.
              http://ideone.com/dIycnd
              Ответить
    • А использовалось оно примерно так:
      фабрика тянула ресурс, поднимала из него бин, начиняла и возвращала его. Удобно это тем, что настройки лежат прямо рядом с кодом, который их использует. В пику любителям контектов и всяких IoC.
      И причем бин мог быть любого типа.

      Трабла возникла лишь тогда, когда при рефакторинге вклинился лишний метод-прослойка с другого класса, в котором на беду тоже лежал файл с настройками. Кстати тот проект так и работает.
      Ответить
  • Дык там же под вторым номером что угодно может быть, не? Или я как-то не так посчитал?
    Ответить
    • The first frame is that associated with this method, so getCallerClass(0) returns the Class object for sun.reflect.Reflection.
      Получается что единичка - readFile, а двоечка - как раз тот кто его вызвал.
      Ответить
  • как-то и мне доводилось писать подобный загружатель ресурсов - от текущего класса.
    а потом ресурсы у меня перестали находиться.
    внимание, вопрос: почему?
    Ответить
    • короче так.
      вариантов тут может быть несколько.
      <extrasence>
      ты вызвал из наследника (который в другом пакадже) метод родителя, и ожидал что оно возьмет ресурс наследника.
      </extrasence>

      Как я понимаю Class.getResourceAsStream попил много крови не только из меня.
      Ответить
      • > ты вызвал из наследника (который в другом
        пакадже) метод родителя, и ожидал что оно
        возьмет ресурс наследника.

        да, это была ощутимая оплеуха от этих ООПешных загрузчиков, именно подстава с наследованием.

        вторая была в том, что я один и тот же ресурс хотел грузить из разных классов в разных пакетах, но указывая относительный путь, приходилось всегда писать разные пути, особенно при реорганизации классов по пакетам.

        и наконец, версия, приближенная к предположению @roman-kashitsyn, я не мог загрузить ресурс из отдельного jarика

        это не считая таких мелочей, как сложности с получением пути пустого пакета (без класса), невозможность получить список этих ресурсов и т.д.
        Ответить
  • но после того я понял, что нефиг, и нужно задавать единый базовый класс, а ресурсы задавать путями от него в константах.
    однако библиотека моих попыток целовать Жабу в зад еще цела
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8