浅谈JAVA8新特性

掌握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 环境搭建完事了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值