如何成为一名合格的程序员
重新对程序员有了理解, 合格的程序员不仅要求有专业的代码能力, 还需要1.良好的沟通能力 2.高的做事效率 3.每天尽量多做一些事情,努力多成长一点.
1.学习了Logback 和 SLF4J 的使用. 怎么选择合适的日志级别?
ERROT: 说明这个地方有错误,必须马上处理。
WARN:可以容忍这些信息,但应该尽快检查及修复。
INFO: 可以说明应用程序的运行过程。
DEBUG :开发多用debug , 会继续执行后面的流程。
TRACE: 只是开发阶段使用。这些日志记录只是临时性的,最终应该关掉。DEBUG和TRACE的区别很难区分,不过如果加了一行日志,在开发测试完后又删了它的话,这条日志就应该是TRACE级别的。
2.1 输入文件应该放在resource文件中 获取文件路径采用 this.getClass().getResource("/").getPath()
2.2 依赖的版本应该在 标签中管理
<properties>
<target.version>2.5.6target.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>your groupIdgroupId>
<artifactId>your artifactIdartifactId>
<version>$
{target.version}
version>
dependency>
dependencies>
dependencyManagement>
2.3 封装了FileUtil类. 方法尽量只做一件事情, 少用static 最好有返回值. 切记 !
阅读Guava源码:Optional & Present & Absent
简介:Guava库设计了Optional来解决null的问题。而Present Absent 均为final class 继承自Optional .
若T类型数据可以为null,Optional是用来以非空值替代T数据类型的一种方法。
通过下面源码发现,Optional初始化时即new一个Present来将传递的引用类型返回!使用了Preconditions的checkNotNull来保证参数不为 null!final class Present extends Optional {
private final T reference;
Present(T reference)
{ this.reference = reference; }
public static T checkNotNull(T reference, @Nullable Object errorMessage) {
if (reference == null)
{ throw new NullPointerException(String.valueOf(errorMessage)); }
return reference;
}
final class Absent extends Optional {
static final Absent INSTANCE = new Absent();
static Optional withType()
{ return (Optional) INSTANCE; }
那么当我确实需要使用null的时候应该怎么使用optional ?
方案:可以调用Optional.absent()方法
从以下源码中可以看出Absent创建时并没有像Present通过Preconditions 检查引用是否为空!
public static Optional absent() {
return Absent.withType();
}
static final Absent INSTANCE = new Absent();
@SuppressWarnings("unchecked") // implementation is "fully variant"
static Optional withType() {
return (Optional) INSTANCE;
}通过两个final class来实现Optional 在两种不同情景下的功能,而且编译器在遇到调用final方法的时候会转入内嵌机制,执行效率较高.
笔记:
1.常用静态方法:
Optional.of(T):获得一个Optional对象,其内部包含了一个非null的T数据类型实例,若T=null,则立刻报错。
Optional.absent():获得一个Optional对象,其内部包含了空值
Optional.fromNullable(T):将一个T的实例转换为Optional对象,T的实例可以不为空,也可以为空[Optional.fromNullable(null),和Optional.absent()等价。
2.实例方法:
1. boolean isPresent():如果Optional包含的T实例不为null,则返回true;若T实例为null,返回false
2. T get():返回Optional包含的T实例,该T实例必须不为空;否则,对包含null的Optional实例调用get()会抛出一个IllegalStateException异常
3. T or(T):若Optional实例中包含了传入的T的相同实例,返回Optional包含的该T实例,否则返回输入的T实例作为默认值
4. T orNull():返回Optional实例中包含的非空T实例,如果Optional中包含的是空值,返回null,逆操作是fromNullable()
5. Set asSet():返回一个不可修改的Set,该Set中包含Optional实例中包含的所有非空存在的T实例,且在该Set中,每个T实例都是单态,如果Optional中没有非空存在的T实例,返回的将是一个空的不可修改的Set。