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

2019-03-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>());
}
上一篇下一篇

猜你喜欢

热点阅读