Сонар - сделать DATE_FORMAT переменной экземпляра

Эта функция преобразует любое число, меньшее чем 3999999, в римский. Обратите внимание, что числа, превышающие 3999, будут внутри метки с text-decoration, установленными на overline, это добавит overline, которое является правильным представлением для x1000, когда число больше 3999.

Четыре миллиона (4 000 000) будут IV с двумя overline s, поэтому вам нужно будет использовать какой-то трюк, чтобы представить это, возможно, DIV с border-top, или некоторое фоновое изображение с этими двумя overline s .. Каждый overline представляет x1000.

function convert(num){
    num = parseInt(num);

    if (num > 3999999) { alert('Number is too big!'); return false; }
    if (num < 1) { alert('Number is too small!'); return false; }

    var result = '',
        ref = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'],
        xis = [1000,900,500,400,100,90,50,40,10,9,5,4,1];

    if (num <= 3999999 && num >= 4000) {
        num += ''; // need to convert to string for .substring()
        result = '<label style="text-decoration: overline;">'+convert(num.substring(0,num.length-3))+'</label>';
        num = num.substring(num.length-3);
    }

    for (x = 0; x < ref.length; x++){
        while(num >= xis[x]){
            result += ref[x];
            num -= xis[x];
        }
    }
    return result;
}
1
задан TheSprinter 4 March 2019 в 08:23
поделиться

3 ответа

Сработало правило S2885:

Необезопасные поля не должны быть статическими

squid: S2885 [ 117]

Не все классы в стандартной библиотеке Java были написаны, чтобы быть потокобезопасными. Использование их многопоточным способом с большой вероятностью может вызвать проблемы с данными или исключения во время выполнения. Это правило создает проблему, когда экземпляр Calendar, DateFormat, javax.xml.xpath.XPath или javax.xml.validation.SchemaFactory помечен как статический.

Так как SimpleDateFormat не является потокобезопасным, он не очень хорошо работает с другими потоками. Возможно, вы ошиблись форматированием дат.

Если вы используете Java 8 или выше, вы должны использовать DateTimeFormatter, как в этот ответ . В противном случае использование Joda Time имеет смысл, согласно этому ответу .


В качестве примечания, наличие класса с именем Constants end позволяет ему содержать все виды статических конечных переменных, которые редко используются. Обычно вы должны поместить каждую константу туда, где она принадлежит.

0
ответ дан Magnilex 4 March 2019 в 08:23
поделиться

Статические переменные в основном используются для констант.
Здесь вы объявили static и присвоили ему экземпляр SimpleDateFormat.
Либо сделайте DATE_TIME_FORMAT нестатичным, либо присвойте этой переменной постоянную.

Лучше поменяйте его на переменную экземпляра и используйте Sting для этого.
например, public final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss:SSS";

0
ответ дан TheSprinter 4 March 2019 в 08:23
поделиться

Используйте joda-time или просто замените переменную методом:

public static final DateFormat getDateTimeFormat() {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS");
}
0
ответ дан Alermikon 4 March 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: