在Java中,为什么最佳做法是声明记录器static final?
private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud) 有一条规则说:
表示常量(最终变量)的名称必须全部使用下划线来分隔单词(取自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中声明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变量.
我在项目中有3个开发人员在写入日志时有不同的样式.哪种变体最好?
LOG.info("error = {}", errmsg);
LOG.info("error = ", errmsg);
LOG.info("error = " + errmsg);
Run Code Online (Sandbox Code Playgroud) 使用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);
为什么这是一个检查式警告?
我想声明一些静态变量并在我的代码中使用它们,所以在这个例子中,如果我想更改电话号码,我会在一个地方更改它:
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);
实际上我更喜欢第二种方法,因为它是线程安全的!
它是否正确?还有其他建议吗?
有什么理由这样做:
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)
我不承认一个人的语法上的好处是什么.两者似乎都很好.
我收到与我的一个字段声明相关的警告,并想知道处理该问题的最佳做法是什么
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)
但恕我直言,它降低了代码的可读性。
所以这让我思考,摆脱警告的正确方法是什么?