четверг, 8 февраля 2007 г.

Java Puzzle 21: What's My Class, Take 2

Решили узнать имя файла, в котором хранится ваш класс? Можете получить совсем не то, что ожидаете, если будете использовать конструкцию типа: BlahBlahBlah.class.getName().replaceAll("\\.", File.separator) + ".class"
Причина опять в том, что метод replaceAll реализован на регулярных выражениях и вторым параметром он ожидает не просто строку, а replacement string, которая описана в спецификации regex. Вот правильный код: BlahBlahBlah.class.getName().replaceAll("\\.", Matcher.quoteReplacement(File.separator)) + ".class"
Будьте осторожны, когда используете незнакомую библиотеку. Ведь можно написать проще: BlahBlahBlah.class.getName().replace('.', File.separatorChar) + ".class"