美文网首页
黑猴子的家:Java 8 -> 类型推断

黑猴子的家:Java 8 -> 类型推断

作者: 黑猴子的家 | 来源:发表于2019-03-02 06:02 被阅读2次
    1、概念

    上述 Lambda 表达式中的参数类型都是由编译器推断得出的。
    Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。
    Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断”。



    类型推断,因为它能猜出来,我们就没有必要写了,你写了,反而显得它很傻,它想告诉我们,它很聪明,编译器现在都很强悍

    2、案例一
    interface I3<T, R> {
          R cale(T t1, T t2);
    }
    public class TestLambda3 {    
          //有返回有参
          @Test
          public void test4() {
                I3<Double, Integer> i = new I3<Double, Integer>() {
                      @Override
                      public Integer cale(Double t1, Double t2) {
                            return (int) (t1 + t2);
                      }
                };
                System.out.println(i.cale(1.5, 2.6));
                System.out.println("------------------------");
                I3<Double, Integer> i2 = (t1, t2) -> (int) (t1 + t2);
                System.out.println(i2.cale(2.2, 3.3));
          }
    }
    
    I3<Double, Integer> i2 = (Double t1, Double t2) -> (int) (t1 + t2);
    
    3、案例二
    package com.yinggu.demo2;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.junit.Test;
    
     * @author 黑猴子的家
     * http://www.121ugrow.com/
     * 此类用于演示类型推断
     * 类型推断: 编译器根据上下文推断出对应的类型,开发人员不用手动的写上类型 
    
    public class TestTypeAna {
          @Test
          public void test1() {
                @SuppressWarnings("unused")
                List<String> list = new ArrayList<>();
          }
    }
    
    List<String> list = new ArrayList<String>();
    
    4、案例三
    @Test
    public void test2() {
          print(new HashMap<>());
    }
    
    public void print(Map<String, Integer> map) {
    
    }
    
    @Test
    public void test2() {
          print(new HashMap<String,Integer>());
    }
    

    相关文章

      网友评论

          本文标题:黑猴子的家:Java 8 -> 类型推断

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