一个类中的静态方法和静态变量可以直接导入使用,而不必导入整个类。使用 import static
package com.yawn.java8;
import static com.yawn.java8.util.TestUtil.DEFAULT_NAME;
import static com.yawn.java8.util.TestUtil.getDefaultName;
/**
* @author yawn
* @date 2018-04-10 15:14
*/
public class Test {
public static void main(String[] args) {
// 静态导入后直接使用
String defaultName = getDefaultName();
String name = DEFAULT_NAME;
}
}
在接口中,可以使用default定义普通方法,也可以使用static定义静态方法;普通方法通过实现类的实例进行调用,静态方法通过接口名进行调用。
package com.yawn.java8;
/**
* @author yawn
* @date 2018-04-10 15:14
*/
public class Test {
public static void main(String[] args) {
IMessage message = new IMessage() {
// 普通方法甚至在实现类中可以重写
@Override
public void hello2() {
System.out.println("hello2 override");
}
@Override
public void message(String message) {
System.out.println(message);
}
};
message.message("这是一个msg消息!");
// 接口中的 default 方法
message.hello1();
message.hello2();
// 接口中的 static 方法
IMessage.world1();
IMessage.world2();
}
}
interface IMessage {
// 普通方法通过对象调用
default void hello1() {
System.out.println("Hello1");
}
default void hello2() {
System.out.println("Hello2");
}
// 静态方法通过类名调用
static void world1() {
System.out.println("World1");
}
static void world2() {
System.out.println("World2");
}
void message(String message);
}
这样使用,使得接口更像抽象类,同时也可以让子类实现多个接口。
XWPFTemplate template = XWPFTemplate.compile("contract_generate.docx");
template.getElementTemplates().stream()
.map(ElementTemplate::getTagName)
.collect(Collectors.toList())
.forEach(System.out::println);
template.getElementTemplates().stream()
.map(element -> element.getTagName())
.collect(Collectors.toList())
.forEach(tagName -> System.out.println(tagName));
当lambda表达式只是调用了一个已经申明过的方法时,为了增加可读性和进一步简化,可以使用方法引用。
4类方法引用:
类型 | 例子 |
---|---|
static方法的引用 | ContainingClass::staticMethodName |
特定对象的方法的引用 | containingObject::instanceMethodName |
特定类型的方法的引用 | ContainingType::methodName |
构造器的引用 | ClassName::new |