美文网首页
Guava学习(一)

Guava学习(一)

作者: lingtongfu | 来源:发表于2016-03-01 22:59 被阅读0次

    如何成为一名合格的程序员

    重新对程序员有了理解,  合格的程序员不仅要求有专业的代码能力,  还需要1.良好的沟通能力  2.高的做事效率   3.每天尽量多做一些事情,努力多成长一点.

    今天遇到的问题

    1.学习了Logback 和 SLF4J 的使用. 怎么选择合适的日志级别?

    ERROT:  说明这个地方有错误,必须马上处理。

    WARN:可以容忍这些信息,但应该尽快检查及修复。

    INFO: 可以说明应用程序的运行过程。

    DEBUG  :开发多用debug ,  会继续执行后面的流程。

    TRACE:  只是开发阶段使用。这些日志记录只是临时性的,最终应该关掉。DEBUG和TRACE的区别很难区分,不过如果加了一行日志,在开发测试完后又删了它的话,这条日志就应该是TRACE级别的。

    2.总结昨天作业遇到的问题

    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 怎么做到 非空值代替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。

    相关文章

      网友评论

          本文标题:Guava学习(一)

          本文链接:https://www.haomeiwen.com/subject/zkdgkttx.html