浅谈JAVA8新特性

来源:互联网 发布:windows信息发布系统 编辑:程序博客网 时间:2024/05/21 18:40
掌握Java8的新特性:
可以通过类去简化实现观察者设计模式的步骤,stream特性,Lambda表达

观察者模式:(订阅发布模式)
原理:当被观察者发生变化的时候,是由被观察者主动通知观察者,我发生了变化,你要根据这个变化去做对应的了逻辑处理
采用这种设计的模式的典型是:EventBus,RxAndroid
补充一点:贯彻着设计模式,容易让人误解他的内部结构,但是大家都这么说所以也就成管理,实际上也可以用订阅发布模式去称。
例子:Android的顶级时间就是典型的观察者模式。
观察者继承observable类 实现方法
public class Guancha extends Observable {    public int count = 0;    public void setmoney(int count){        this.count=count;        //被观察者的方法  必须实现的方法   一个是刷新的一个是设置的        setChanged();        notifyObservers();    }}
被观察者岭一个类实现observer
public class Bzhe implements Observer {    //参数1  是继承observerable    专门处理观察变化后的业务逻辑。    @Override    public void update(Observable observable, Object o) {        if (observable instanceof Guancha){            Guancha guancha = (Guancha) observable;            Log.d("wwb","修改的价格为"+guancha.count);        }    }}

就可以通过在主类里面进行修改,在被观察者里面就可以监听到观察者的一个改变状态。
Guancha guancha = new Guancha();        Bzhe bei = new Bzhe();        guancha.addObserver(bei);        guancha.setmoney(150);

Lambda表达式和函数式接口
步骤:
一、Java版本必须1.8以上
二、替换方法必须为接口,接口里面不能有多个方法
三、必须要搭建环境
lambda 犯法引用:一般我们不会去写,但是第三方会用到,所以了解即可

* 静态方法引用格式 : 类名 :: 方法名 例子 CLassName :: MethodName
* 实例方法引用格式 : 类对象 :: 方法名 例子 Instance :: MethodName
* 类型方法引用格式 : 类名 :: 方法名 例子 CLassName :: MethodName

 private void lambda() {        new Thread(             new Runnable() {            @Override            public void run() {                Log.d("ycf", "使用系统原生的代码");            }        }).start();        //A.将上面的代码替换成Lambda表达式(Runnable()变成灰色)        //A.实际就是把没有什么作用的格式用 "()->" 替换,只保留有作用的核心代码.        new Thread(       () -> Log.d("ycf", "使用系统原生的代码")        ).start();    }

上述为两种线程,实现的同一种功能,但是代码量的差异就比较大了。
通过
() ->直接替换了我们的runnable对象和实现的run方法
如果想要传递参数的话 直接引用()里面的参数即可,而且还可以不写类型,不过要是不写类型的话,会给人盟逼的感觉,不知道是啥


需要注意的地方是在开发中lambada使用较少,因为在开发中,我们包括抽取基类或者定义接口中,通常会定义很多个方法,但是lambada只支持单接口的方法,也就是接口里面只能存在一个方法。局限性还是非常大的。


最后边添加环境的创建:
写在后边的原因呢,就是怕有些哥们不认真,直接粘,报错有木有?
哈哈,我们不仅要学习,要要学清楚。
首先是工作空间:
build-->
buildscript和allprojects下边添加-->mavenCentral()
dependencies 下边添加
classpath 'me.tatarka:gradle-retrolambda:3.3.1'
然后是项目空间:
build-->
apply plugin: 'me.tatarka.retrolambda'(注意:这个是开局就添加的在Android外边)

然后在Android内部添加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
OK 环境搭建完事了。


原创粉丝点击