在Java8 之前在接口中只能存在方法名,不能存在方法体,在Java8之后,在接口中可以存在静态方法体了.
下面以一个字符串工具类来说明这个新特性.
在Java7及以前,如果我们想写一个工具类,必须创建一个类,在里面写上相应的工具方法
//Java7 之前的写法
package cn.monoy.demos2;
public class StringUtil {
public static boolean isNull(String src) {
return src == null;
}
public static boolean isBlank(String src) {
return src.trim().equals("");
}
}
如果要调用工具类里面的方法,则需要实例化或者使用类名.方法名来调用
//Java7 及之前版本调用工具类的方法
package cn.monoy.demos2;
public class Main {
public static void main(String[] args) {
boolean res = StringUtil.isBlank(" ");
System.out.println(res);
}
}
而在Java8中我们可以创建一个接口在接口中写相应的静态方法了.
//Java8 中在接口中写方法
package cn.monoy.demos2;
public interface IStringUtil {
public static boolean isNull(String src) {
return src == null;
}
public static boolean isBlank(String src) {
return src.trim().equals("");
}
}
调用也很简单
//Java8 中调用接口静态方法
package cn.monoy.demos2;
public class Main {
public static void main(String[] args) {
boolean res = IStringUtil.isBlank("");
System.out.println(res);
}
}
使用接口来作为工具类,接口不能实例化的特性直接消灭了传统工具类必须私有化构造方法的冗余代码.解决了某些默认类实现了多个传统接口必须大量写空方法的问题.即我需要什么功能直接找相应的工具接口调用其中的方法即可,详细点说就是类A 只需要调用 接口B,C,D中的一个方法,但是必须实现B,C,D中所有方法的困境.