相关疑难解决方法(0)

为什么我们声明Loggers静态最终?

在Java中,为什么最佳做法是声明记录器static final

private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud)

java logging

120
推荐指数
4
解决办法
8万
查看次数

静态最终变量的Java命名约定

有一条规则说:

表示常量(最终变量)的名称必须全部使用下划线来分隔单词(取自http://geosoft.no/development/javastyle.html)

这适用于原始类型,如int或字符串:

private static final int MAX_COUNT = 10;
Run Code Online (Sandbox Code Playgroud)

但是什么是非原始类型?在大多数情况下,我见过以下内容:

private static final Logger log = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

或者在单例中,实例变量不是大写的.

问题是声明这些类型的变量(如日志和实例)的正确方法是什么?

java coding-style

89
推荐指数
5
解决办法
13万
查看次数

这是在java中声明logger变量的最佳方法

我只想知道在java中声明logger变量的最佳方法是哪种.以下是一些声明.

1> private static final Logger logger = Logger.getLogger(ServiceImpl.class);

2> private static Logger logger = Logger.getLogger(ServiceImpl.class);

3> private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class);

4> private static Logger LOGGER= Logger.getLogger(ServiceImpl.class);
Run Code Online (Sandbox Code Playgroud)

PS我真的很感激,如果有人知道另一个最好的替代方法来声明looger变量.

java logging

11
推荐指数
2
解决办法
1万
查看次数

slf4j日志语法

我在项目中有3个开发人员在写入日志时有不同的样式.哪种变体最好?

LOG.info("error = {}", errmsg);
LOG.info("error = ", errmsg);
LOG.info("error = " + errmsg);
Run Code Online (Sandbox Code Playgroud)

logging slf4j

6
推荐指数
1
解决办法
3090
查看次数

解决Java Checkstyle错误:名称'logger'必须匹配模式'^ [AZ] [A-Z0-9]*(_ [A-Z0-9] +)*$'

使用Eclipse Checkstyle插件我看到这个错误:

名称'logger'必须与模式匹配'^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'.

我通过更改来解决此错误:

private static final Logger logger = Logger.getLogger(someClass.class);

private static final Logger LOGGER = Logger.getLogger(someClass.class);

为什么这是一个检查式警告?

java eclipse constants checkstyle

6
推荐指数
2
解决办法
8507
查看次数

我应该使用静态方法还是静态字段

我想声明一些静态变量并在我的代码中使用它们,所以在这个例子中,如果我想更改电话号码,我会在一个地方更改它:

public class AppInformation{
    static String phone_number="44444444";
}
Run Code Online (Sandbox Code Playgroud)

所以现在我可以通过调用类来获取phone_number : AppInformation.phone_number;

另一种方案:

public class AppInformation {

    public static String get_phone_number(){
        return "44444444";
    } 
}
Run Code Online (Sandbox Code Playgroud)

现在我可以调用方法:( AppInformation.get_phone_number);

实际上我更喜欢第二种方法,因为它是线程安全的!

它是否正确?还有其他建议吗?

java static multithreading

2
推荐指数
1
解决办法
92
查看次数

重命名"log"记录器以符合"LOG(?:GER)?"格式.

我试图用sonarlint检查代码质量.在问题概要之后,我无法理解它为什么要说它要大写.但是这个讨论反对上面的建议.哪一个应该被认为是正确的?

logging intellij-idea sonarqube sonarlint

2
推荐指数
1
解决办法
1594
查看次数

以全部大写形式声明记录器并使其成为最终记录是否有所不同?

有什么理由这样做:

private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
Run Code Online (Sandbox Code Playgroud)

而不是这个?

private static Logger logger = LoggerFactory.getLogger(Main.class);
Run Code Online (Sandbox Code Playgroud)

我不承认一个人的语法上的好处是什么.两者似乎都很好.

java syntax static final uppercase

0
推荐指数
1
解决办法
1382
查看次数

私有对象字段可以是最终的,netbeans 警告

我收到与我的一个字段声明相关的警告,并想知道处理该问题的最佳做法是什么

public class ModeloCatalogo extends Modelo {

    private static ArrayList<String> excluidas = new ArrayList<>();
    ...bunch of irrelevant fields...

    private static void functionThatLoadsValuesIntoArrayList(){
        excluidas.add("String 1");
        ...
        excluidas.add("String n");
    }
    ...bunch of irrelevant methods...
}
Run Code Online (Sandbox Code Playgroud)

在字段声明中,netbeans 警告“字段可以是最终的”,可以这样解决:

    private static ArrayList<String> EXCLUIDAS = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

请注意,如果不是大写,netbeans 将根据命名约定生成不同的警告。(为了清楚起见在编辑中添加)

至于命名约定,它应该是大写的,这让我感到畏缩,似乎不对。

通过在将值加载到数组的函数内初始化数组来消除警告。

    private static ArrayList<String> excluidas;

    private static void functionThatLoadsValuesIntoArrayList(){
        excluidas  = new ArrayList<>();
        excluidas.add("String 1");
        ...
Run Code Online (Sandbox Code Playgroud)

但恕我直言,它降低了代码的可读性。

所以这让我思考,摆脱警告的正确方法是什么?

java netbeans

0
推荐指数
1
解决办法
1万
查看次数