Java 16 新特性之record类

Java 投稿 34900 0 评论

Java 16 新特性之record类

下面就来具体了解record类的细节。

声明record类

record range(int start, int end){}

我们知道class类可以在单独文件中生命,也可以在其他类中申明。那么record类也一样,它有这几种申明方式:

  1. 单独文件申明:

public record range(int start, int end){}
  1. 在类内部申明:

public class DidispaceTest {
    public record range(int start, int end){}
}
  1. 函数内申明:

public class DidispaceTest {
  public void test() {
    public record range(int start, int end){}
  }
}

record类详解

在知道了如何申明之后,你一定会想用申明的就那么点元素,它到底会具备什么能力呢?

申明的类,具备这些特点:

  1. 它是一个类

  2. 自动实现、、函数

  3. 成员变量均为属性

public final class range{
    final int start;
    final int end;

    public range(int start, int end) {
        this.start = start;
        this.end = end;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        range range = (range) o;
        return start == range.start && end == range.end;
    }

    @Override
    public int hashCode() {
        return Objects.hash(start, end);
    }

    @Override
    public String toString() {
        return "range{" +
                "start=" + x +
                ", end=" + y +
                '}';
    }

    public int start(){
        return start;
    }

    public int end(){
        return end;
    }
}

因为一些函数是隐藏的,在range定义的时候,我们看不到,所以我们可以尝试写这样一段测试代码来验证一下:

@Test
public void test() {
  range r = new range(100, 200);
  log.info(r.toString());

  range r2 = new range(100, 200);
  log.info(String.valueOf(r.equals(r2)));
}

定义成员函数

因为申明的本质也是类,那么定义成员函数肯定也是可以的。

record range(int start, int end){
  int distance(){
    return end - start;
  }
}

然后,就可以这样调用它:

range r = new range(100, 200);
r.distance();

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

编程笔记 » Java 16 新特性之record类

赞同 (43) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽