Java 8 方法引用和默认方法

Java8方法引用


  方法引用有助于自己的名字指向方法。方法参考描述使用“::”符号。一种方法参考可以用来指向下列类型的方法。

  • 静态方法。

  • 实例方法。

  • 使用new运算符构造函数(TreeSet::new)

方法参考实例

使用所选择的任何编辑器创建下面的java程序C:/> JAVA

Java8Tester.java
   
   
  1. import java.util.List;
  2. import java.util.ArrayList;
  3. public class Java8Tester {
  4. public static void main(String args[]){
  5. List names = new ArrayList();
  6. names.add("Mahesh");
  7. names.add("Suresh");
  8. names.add("Ramesh");
  9. names.add("Naresh");
  10. names.add("Kalpesh");
  11. names.forEach(System.out::println);
  12. }
  13. }

在这里,我们通过使用System.out:: println方法为静态方法引用。

结果如下:

Mahesh
Suresh
Ramesh
Naresh
Kalpesh



Java8默认方法


  Java8引入的接口默认方法实现一个新的概念。此功能是为了向后兼容性增加,使旧接口可用于利用JAVA8。 lambda表达式的能力,例如,列表或集合接口不具备forEach方法声明。从而增加了这样的方法只会打破收集框架实现。 Java8引入了默认的方法使 列表/Collection接口 可以拥有forEach默认方法,并实行类实现这些接口不需要实现相同功能。

语法

    
    
  1. public interface vehicle {
  2. default void print(){
  3. System.out.println("I am a vehicle!");
  4. }
  5. }

多重默认

在接口默认方法,它们是一类实现两个接口使用相同的默认方法,那么如何解决这种模糊性。考虑下面的情况。

   
   
  1. public interface vehicle {
  2. default void print(){
  3. System.out.println("I am a vehicle!");
  4. }
  5. }
  6. public interface fourWheeler {
  7. default void print(){
  8. System.out.println("I am a four wheeler!");
  9. }
  10. }

第一个解决方案是创建一个自己的方法,并覆盖默认实现。

   
   
  1. public class car implements vehicle, fourWheeler {
  2. default void print(){
  3. System.out.println("I am a four wheeler car vehicle!");
  4. }
  5. }

第二个解决方法是调用使用超指定接口的默认方法。

   
   
  1. public class car implements vehicle, fourWheeler {
  2. default void print(){
  3. vehicle.super.print();
  4. fourWheeler.super.print();
  5. }
  6. }


静态默认方法

现在,从Java8起接口也可以有静态辅助方法。

   
   
  1. public interface vehicle {
  2. default void print(){
  3. System.out.println("I am a vehicle!");
  4. }
  5. static void blowHorn(){
  6. System.out.println("Blowing horn!!!");
  7. }
  8. }

默认方法示例


Java8Tester.java
   
   
  1. public class Java8Tester {
  2. public static void main(String args[]){
  3. Vehicle vehicle = new Car();
  4. vehicle.print();
  5. }
  6. }
  7. interface Vehicle {
  8. default void print(){
  9. System.out.println("I am a vehicle!");
  10. }
  11. static void blowHorn(){
  12. System.out.println("Blowing horn!!!");
  13. }
  14. }
  15. interface FourWheeler {
  16. default void print(){
  17. System.out.println("I am a four wheeler!");
  18. }
  19. }
  20. class Car implements Vehicle, FourWheeler {
  21. public void print(){
  22. Vehicle.super.print();
  23. FourWheeler.super.print();
  24. Vehicle.blowHorn();
  25. System.out.println("I am a car!");
  26. }
  27. }
结果如下:
I am a vehicle!                                                          
I am a four wheeler!  
Blowing horn!!!                                                   
I am a car!  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值