持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
默认方法
在Java8以前,接口中不能有实现了的方法,如下
Java8开始引入了默认方法,接口可以含有默认方法,简单的说就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。
interface InterfaceA {
default void printName() {
System.out.println(this.getClass().getSimpleName());
}
}
//实现类
class InterfaceAImpl implements InterfaceA{
}
可以看到即使InterfaceAImpl没有实现printName()方法,代码都是可以编译的。因为在InterfaceA中它有了默认实现。
类型注解
Java5开始引入了注解这一特性,使用它可以简化程序中的配置。在Java8之前,注解只能是在声明的地方所使用,比如类,方法,属性。而从Java8开始,注解中添加了类型注解,类型注解可以在任何使用类型的地方使用。 Java8中元注解@Target的参数ElementType枚举类的枚举值添加了以下两种
- TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中,即泛型类,泛型接口,泛型方法上
- TYPE_USE 表示该注解可以写在任何使用类型的语句中
创建类型注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
@interface MyAnnotation {
String value() default "hello";
}
使用类型注解
class TestAnnotation<@MyAnnotation T> {
public void printName(T t) {
String name = new @MyAnnotation String("name");
}
}
可以看到注解已经不仅仅只能放在类,方法,接口上面,而是可以使用在任何地方了。
重复注解
在java8之前,如果需要在同一个元素上使用多个相同类型的注解,需要曲线救国,借助数组实现。
@interface Role {
String role();
}
@interface Roles {
Role[] value();
}
class Man {
@Roles({@Role(role = "Son"), @Role(role = "Father"), @Role(role = "Husband")})
public void role() {
}
}
而在Java8中,开始引入了重复注解,只需要在我们定义需要重复的注解时,使用@Repeatable注解表示对应的注解是可重复的。
@Repeatable(Roles.class)
@interface Role {
String role();
}
@interface Roles {
Role[] value();
}
class Man {
@Role(role = "Son")
@Role(role = "Father")
@Role(role = "Husband")
public void role() {
}
}
虽然和之前相差不大,但是提高了代码的可读性。