Подтвердить что ты не робот

Этот метод от JDK имеет смысл для всех?

Я наткнулся на этот метод в JDK

Из com.sun.org.apache.xml.internal.serializer.Version;

  public static int getDevelopmentVersionNum()
  { 
    try {   
        if ((new String("")).length() == 0)
          return 0;
        else  
          return Integer.parseInt("");
    } catch (NumberFormatException nfe) {
           return 0;
    }    
  } 

Это что-то большее, чем return 0?

Я чувствую, что у меня что-то не хватает. Я могу только предположить, что это сгенерированный код.;)

4b9b3361

Ответ 1

Похоже, что этот файл создается из следующего Version.src file путем текстовой подстановки. Поэтому, когда переменная @[email protected] пуста, генерируется код, о котором идет речь. length() требуется проверка, чтобы в этом случае вернуть 0.

Ответ 2

Я думаю, что "" заменяется некоторой строкой из файла конфигурации перед выпуском. В этом случае он пуст, но может также содержать число. Если вы считаете "" переменной, этот код имеет смысл.

Ответ 3

javadoc в методе указывает, что он предназначен для обозначения падения развития, которое выполняется в процессе. Поэтому я бы сказал, что он имеет такой же смысл, как и все, что предназначено только для внутреннего развития. Может быть, они "смывают" любую фактическую информацию о версии из этого метода после их выпуска. В любом случае, я бы не придавал этому значения. Если вы не являетесь разработчиком oracle, работая над этим конкретным пакетом.

Ответ 4

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

Если эта строка является числом, метод возвращает свое значение как число. Если он пуст (как в этом случае) или не является числом, он возвращает 0.

Ответ 5

Похоже, что исходный xalan имеет аналогичную реализацию - по крайней мере, я нашел те же строки для xalan 2.7.1 на grepcode

Это действительно не имеет никакого смысла, для больших усилий для метода, который всегда возвращает 0;) Но, глядя на javaDoc Version и этот метод, создается впечатление, что все это (или была) незавершенная работа - своего рода заглушка для реализации, где можно просто ввести (hardcode) номер версии. Пока что блок else и блок catch являются недостижимым кодом.

Возможно, Version.java будет/будет автогенерироваться, и процессор может генерировать этот метод с реальным значением вместо "" - в этом случае было бы целесообразно защитить метод, поскольку значение из файла конфигурации может не быть представляют собой целое число.