Соглашения об именах констант Java для форматов даты - PullRequest
0 голосов
/ 15 октября 2018

Имена констант должны совпадать с этим регулярным выражением '^ [AZ] [A-Z0-9] (_ [A-Z0-9] +) $' НоУ меня есть DateConstant, и я думаю, что форматы дат констант более понятны и читабельны, если использовать, напишите их так:

public static final String DATE_FORMAT_yyyyMMdd = "yyyyMMdd";
public static final String DATE_FORMAT_yyyy_MM_dd = "yyyy-MM-dd";
public static final String DATE_FORMAT_yyyy_MM_dd_Combined = "yyyyMMddHHmm";
public static final String DATE_FORMAT_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
public static final String DATE_FORMAT_dd_MM_yyyy = "dd-MM-yyyy";
public static final String DATE_FORMAT_dd_MM_yyyy_WITH_DOT = "dd.MM.yyyy";
public static final String DATE_FORMAT_mm_dd_yyyy_WITH_SLASH = "MM/dd/yyyy";
public static final String DATE_FORMAT_m_d_yyyy_WITH_SLASH = "M/d/yyyy";
public static final String DATE_FORMAT_dd_mm_yyyy_WITH_SLASH = "dd/MM/yyyy";
public static final String DATE_FORMAT_dd_MMM = "ddMMM";
public static final String DATE_FORMAT_dd_MM_yy = "ddMMyy";
public static final String DATE_FORMAT_dd_MMM_yyyy = "ddMMMyyyy";
public static final String DATE_FORMAT_dd_MM_yyyy_COMBINED = "ddMMyyyy";
public static final String DATE_FORMAT_dd_MM_yyyy_HH_mm_ss = "yyyy-MM-dd'T'HH:mm:ss";
public static final String DATE_FORMAT_dd_MM_yyyy_HH_mm_ss_sz = "yyyy-MM-dd'T'HH:mm:ss.SSS";
public static final String DATE_FORMAT_dd_MM_yyyy_HH_mm_ss_sz_XXX = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"; // with mobile client
public static final String DATE_FORMAT_dd_MM_yyyy_HH_mm = "dd-MM-yyyy HH:mm";
public static final String DATE_FORMAT_HH_mm = "HH:mm";
public static final String DATE_FORMAT_YYYY_MM_DDTHH_mm_ssZ = "YYYY-MM-DD'T'HH:mm:ssZ"; // Google Calendar Format

Мне нужен совет и я найду альтернативный способ переименования этих имен констант.

1 Ответ

0 голосов
/ 15 октября 2018

Я полностью согласен с @ luk2302, в том числе значение константы в ее названии - плохая идея.

Однако, учитывая вашу текущую ситуацию, почему бы просто не определить Map, который является статическим и окончательным.Это почти эквивалентно всем вашим определенным константам, и вы не получите никаких предупреждений от вашей IDE или таких инструментов, как sonar .

. В этом решении мы создаем 2 карты,Первая карта содержит все значения констант, но определяется как private.Если это объявлено как общедоступное, тогда его значения могут быть изменены и нарушает цель constant.Чтобы преодолеть эту проблему, мы определяем карту unmodifiable, которая объявлена ​​в последней строке статического блока.Теперь, выставив только эту карту, никакие мутации на ней невозможны.

Попробуйте:

public class Constant {
    private Constant() { } // Can't create obj of this class

    // map that contains the constans but not exposed
    private static final Map<String, String> mapOfConstants = new HashMap<String, String>();
    // unmodifiable map that is exposed
    public static Map<String, String> unmodifiableMap;

    static {
        mapOfConstants.put("yyyyMMdd", "yyyyMMdd");
        mapOfConstants.put("yyyy_MM_dd", "yyyy-MM-dd");
        mapOfConstants.put("yyyy_MM_dd_Combined", "yyyyMMddHHmm");
        mapOfConstants.put("yyyy_MM_dd_HH_mm", "yyyy-MM-dd HH:mm");
        mapOfConstants.put("dd_MM_yyyy", "dd-MM-yyyy");
        mapOfConstants.put("dd_MM_yyyy_WITH_DOT", "dd.MM.yyyy");
        mapOfConstants.put("mm_dd_yyyy_WITH_SLASH", "MM/dd/yyyy");
        mapOfConstants.put("m_d_yyyy_WITH_SLASH", "M/d/yyyy");
        mapOfConstants.put("dd_mm_yyyy_WITH_SLASH", "dd/MM/yyyy");
        mapOfConstants.put("dd_MMM", "ddMMM");
        mapOfConstants.put("dd_MM_yy", "ddMMyy");
        mapOfConstants.put("dd_MMM_yyyy", "ddMMMyyyy");
        mapOfConstants.put("dd_MM_yyyy_COMBINED", "ddMMyyyy");
        mapOfConstants.put("dd_MM_yyyy_HH_mm_ss", "yyyy-MM-dd'T'HH:mm:ss");
        mapOfConstants.put("dd_MM_yyyy_HH_mm_ss_sz", "yyyy-MM-dd'T'HH:mm:ss.SSS");
        mapOfConstants.put("dd_MM_yyyy_HH_mm_ss_sz_XXX", "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); 
        mapOfConstants.put("dd_MM_yyyy_HH_mm", "dd-MM-yyyy HH:mm");
        mapOfConstants.put("HH_mm", "HH:mm");
        mapOfConstants.put("YYYY_MM_DDTHH_mm_ssZ", "YYYY-MM-DD'T'HH:mm:ssZ");

        // observe this line
        unmodifiableMap = Collections.unmodifiableMap(mapOfConstants);   
    }
}

Теперь вы можете использовать ее в другом классе, например:

public class Test {

    public static void main(String[] args) {
        Constant.unmodifiableMap.get("dd_MM_yyyy_COMBINED");

        // this wouldn't execute
        Constant.unmodifiableMap.put("asd", "asdad");
    }
}

Вы также не сможете использовать enum , так как он попросит вас определить константы в соответствии с вашим вопросом.

...