技术开发 频道

看看JDK 8能给开发者们带来什么

  即使我还没有写过与java swing,AWT相关的功能,但是我还是可以断定:lambdas肯定会给那些Swing开发者带去很多的便利。

  动作监听:

JButton button = new JButton("Click");

// NEW WAY:
button.addActionListener( (e) -> {
    System.out.println(
"The button was clicked!");
});

// OLD WAY:
button.addActionListener(new ActionListener() {
          @Override
          
public void actionPerformed(ActionEvent e) {
              System.out.println(
"The button was clicked using old fashion code!");
          }
      });

  什么是SAM?SAM 是单个抽象方法的替代,因此,直接一点,我们可以说SAM==功能性接口。即使在最初的规范里面,只有一个抽象方法的抽象类被认为是SAM类型的,很多人还是发现/猜出了这样定义的原因。

  方法/构造方法 引用

  lambdas表达式听起来不错?但是不知为何功能接口带有一定的限制性- 那是否意味着我只能用包含单个抽象方法的接口呢?不见得——JDK8提供了一个别名机制,允许类或者对象的方法“调用”。用一个新增的操作符::可以做到。他可以应用到静态方法或者对象方法的调用。同样也可以应用于构造函数。

  参考代码:

interface ConstructorReference {
    T constructor();
}

interface  MethodReference {
    
void anotherMethod(String input);
}

public class ConstructorClass {
    String value;

    
public ConstructorClass() {
        value
= "default";
    }

    
public static void method(String input) {
        System.out.println(input);
    }

    
public void nextMethod(String input) {
        
// operations
    }

    
public static void main(String... args) {
        
// constructor reference
        ConstructorReference reference = ConstructorClass::new;
        ConstructorClass cc
= reference.constructor();

        
// static method reference
        MethodReference mr = cc::method;

        
// object method reference
        MethodReference mr2 = cc::nextMethod;

        System.out.println(cc.value);
    }
}

  在接口中的默认方法

  这意味着从版本8,JAVA接口可以含有方法体,所以为了使其简单,JAVA将支持多重继承,摆脱了以前比如头痛的问题。并且,通过为接口方法提供默认的实现,可以保证确保添加一个亲的方法不会在实现类中制造混乱。JDK8已经加入了默认方法到接口中如:java.util.Collection 和 java.util.Iterator,并且通过这个功能,可以提供一个机制去更好地在我们真的需要时使用lambdas。

  已经加入的主要接口了:

java.util.stream.Streamable
java.util.stream.Stream
1
相关文章