java记录时长的类型_Java中的记录类型

java记录时长的类型

java记录时长的类型

于2020年3月发布的JDK 14引入了记录(预览语言功能),该记录提供了一种简洁的语法来声明主要用于保存数据的类。 在记录中,所有低级,重复且容易出错的代码都类似于构造函数,访问器和通用方法,例如equals()hashCode()toString()都是根据记录的状态描述自动得出的。

先决条件

您将需要启用了预览功能的JDK 14。

了解如何使用SDKMAN管理多个Java SDK! 轻松

我们将

记录申报

记录具有名称和状态描述。 状态描述声明记录组成部分,并可选地声明主体:

 record Owner(String name, String address, String city, String telephone) {}
 record PetType(String name) {}
 record Pet(LocalDate birthDate, PetType type, Owner owner) {}

记录的表示是通过以下成员从状态描述中机械而完全地得出的:

  • 每个组件的private final字段
  • 每个组件的public读取访问器方法,其名称和类型与该组件相同(例如owner.name()owner.address() )
  • public建设者
  • equals()hashCode()
  • toString()的实现。

下面的测试演示了基本行为:

 class Java14RecordTests { 
    @Test

    void recordAccessors() { 
        var owner = new Owner( "John Doe" , "110 W. Liberty St." , "Madison" , "6085551023" ); 
        assertThat(owner.name()).isEqualTo( "John Doe" );

        assertThat(owner.address()).isEqualTo( "110 W. Liberty St." );

        assertThat(owner.city()).isEqualTo( "Madison" );

        assertThat(owner.telephone()).isEqualTo( "6085551023" ); 
    }

    @Test

    void recordEqualsAndHashCode() { 
        var pet1 = new Pet(

                LocalDate.of( 2019 , 1 , 1 ),

                new PetType( "dog" ),

                new Owner( "John Doe" , null , null , null )

        );

        var pet2 = new Pet(

                LocalDate.of( 2019 , 1 , 1 ),

                new PetType( "dog" ),

                new Owner( "John Doe" , null , null , null )

        );

        assertThat(pet1).isEqualTo(pet2);

        assertThat(pet1.hashCode()).isEqualTo(pet2.hashCode());

    }

    @Test

    void recordToString() {

        var pet = new PetType( "dog" );

        assertThat(pet.toString()).isEqualTo( "PetType[name=dog]" );

    }
 }

限制条件

记录是类的一种受限形式,其限制是:

  • 记录不能扩展任何其他类别
  • 声明的任何其他字段必须为静态
  • 记录的组成部分是隐式最终的

额外行为

除上述限制外,记录的行为类似于常规类,并且:

  • 记录可以声明实例和静态方法,静态字段,静态初始化器:
 record Owner(String name, String address, String city, String telephone) {

    /* Static initializer */

    static {

        NONE = "N/A" ;

    }

    /* Static fields are allowed, both private and public */

    private static String NONE; 
    /* Records may have static methods */

    public static Owner anOwner(String name) {

        return new Owner(name, NONE, NONE, NONE);

    }
 }
  • 记录可以声明构造函数,也可以声明紧凑构造函数。 紧凑的构造函数可以访问记录的组件:
 record Pet(LocalDate birthDate, PetType type, Owner owner) {

    /* `Compact` constructor */

    public Pet {

        "birthDate" requiresNotNull( "birthDate" , birthDate);

        requiresNotNull( "type" , type);

        requiresNotNull( "owner" , owner);

    }
    
    public Pet(LocalDate birthDate, PetType type) {

        this (birthDate, type, null );

    }

    /* Records may have instance methods */

    private void requiresNotNull(String name, Object obj) {

        if (Objects.isNull(obj)) {

            throw new IllegalArgumentException(name + " can't be null" );

        }

    }
 }
  • 记录可以覆盖所有标准方法: equals()hashCode()toString()
  • 记录可以实现接口
  • 记录可以注释

… 和更多。

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/java9-and-beyond

参考文献

翻译自: https://www.javacodegeeks.com/2020/05/record-type-in-java.html

java记录时长的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个能够在线播放视频并记录播放时长的示例,需要使用到Java Web的Servlet和JSP技术以及HTML5的video标签和JavaScript语言。 以下是一个简单的实现示例,供参考: 1. 创建一个名为`VideoServlet`的Servlet类,用于处理视频文件的请求,并记录视频播放时长。 ```java public class VideoServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String videoPath = request.getParameter("videoPath"); // 获取请求参数,即视频文件路径 String playTime = request.getParameter("playTime"); // 获取请求参数,即视频播放时长 // 记录视频播放时长 // TODO: 将playTime保存到数据库,需要自行实现 // 获取视频文件的绝对路径 String absolutePath = getServletContext().getRealPath(videoPath); // 设置response的内容类型为视频格式 response.setContentType("video/mp4"); // 读取视频文件 FileInputStream in = new FileInputStream(new File(absolutePath)); OutputStream out = response.getOutputStream(); // 缓冲区大小 byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close(); } } ``` 2. 创建一个名为`video.jsp`的JSP页面,用于显示视频和记录视频播放时间。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>视频播放器</title> </head> <body> <video width="640" height="360" controls> <source src="${pageContext.request.contextPath}/video?videoPath=${videoPath}&playTime=${playTime}" type="video/mp4"> </video> <script> var video = document.getElementsByTagName("video")[0]; var playTime = 0; // 监听视频播放时间变化事件,每5秒记录一次播放时间 video.addEventListener("timeupdate", function() { if (parseInt(video.currentTime) % 5 == 0) { playTime = parseInt(video.currentTime); updatePlayTime(playTime); } }); // 发送请求,更新视频播放时间 function updatePlayTime(playTime) { var xhr = new XMLHttpRequest(); xhr.open("GET", "${pageContext.request.contextPath}/updatePlayTime?videoPath=${videoPath}&playTime=" + playTime, true); xhr.send(); } </script> </body> </html> ``` 3. 创建一个名为`UpdatePlayTimeServlet`的Servlet类,用于处理更新视频播放时长的请求。在该类,我们可以将视频播放时长保存到数据库。 ```java public class UpdatePlayTimeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String videoPath = request.getParameter("videoPath"); // 获取请求参数,即视频文件路径 String playTime = request.getParameter("playTime"); // 获取请求参数,即视频播放时长 // 更新视频播放时长到数据库 // TODO: 将playTime保存到数据库,需要自行实现 } } ``` 以上示例,我们使用HTML5的video标签播放视频,并使用JavaScript监听播放时间变化事件,每5秒记录一次播放时间,并通过XMLHttpRequest发送请求,将播放时间记录到数据库。 注意:以上示例仅供参考,实际应用需要根据具体需求进行适当调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值