实现一个简单的播放器,要求功能有:播放、暂停、停止、退出功能,按停止键会重置封面转角,进度条和播放按钮;按退出键将停止播放并退出程序。

后台播放功能,按手机的返回键和home键都不会停止播放,而是转入后台进行播放。进度条显示播放进度、拖动进度条改变进度功能。
播放时图片旋转,显示当前播放时间功能,圆形图片的实现使用的是一个开源控件CircleImageView

文件:url80.ctfile.com/f/25127180-738852279-06ee0a?p=551685 (访问密码: 551685)

加分项

用户可以点击选歌按钮自己选择歌曲进行播放,要求换歌后不仅能正常实现上述的全部功能,还要求选歌成功后不自动播放,重置播放按钮,重置进度条,重置歌曲封面转动角度,最重要的一点:需要解析mp3文件,并更新封面图片。


layout: post
categories: Java
title: Java 中你绝对没用过的一个关键字?
tagline: by 子悠
tags:

子悠
前面的文章给大家介绍了如何自定义一个不可变类,没看过的小伙伴建议去看一下,这节课给大家介绍一个 Java 中的一个关键字 Record,那 Record 关键字跟不可变类有什么关系呢?看完今天的文章你就知道了。友情提示 Record 关键字在 Java14 过后才支持的,所以是不是被阿粉说中了,还在使用 Java 8 的你一定没用过!

不可变类
我们先看一下之前定义的不可变类,代码如下。

package com.example.demo.immutable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public final class Teacher {
private final String name;
private final List students;
private final Address address;
private final Map<String, String> metadata;

public Teacher(String name, List students, Address address, Map<String, String> metadata) {
this.name = name;
this.students = students;
this.address = address;
this.metadata = metadata;
}

public String getName() {
return name;
}

public List getStudents() {
return new ArrayList<>(students);
// return students;
}

public Address getAddress() {
// return address;
return address.clone();
}

public Map<String, String> getMetadata() {
return new HashMap<>(metadata);
// return metadata;
}
}

如果你复制上面代码到 IDEA 中,并且刚好你的 JDK 版本是Java14 之后的话,那么你就会看到下面这个提示,提示我们可以将 Teacher 这个不可变类转换为 Record。怎么样是不是很懵,没关系,我们按照提示操作一下看看会发生什么。

点完之后我们的代码会变成下面的样子

package com.example.demo.immutable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public record Teacher(String name, List students, Address address, Map<String, String> metadata) {

@Override
public List students() {
return new ArrayList<>(students);
// return students;
}

@Override
public Address address() {
// return address;
return address.clone();
}

@Override
public Map<String, String> metadata() {
return new HashMap<>(metadata);
// return metadata;
}
}

仔细一看你会发现,这是什么情况,record 是什么关键字,然后类名后面怎么还有参数?乍一看还以为变成一个方法了。此外我们之前的测试代码不用修改任何逻辑,照样可以正常运行,是不是很神奇?这就是 Record 关键字的特性。

Record 关键字
看完了 Record 关键字的 case ,我们来聊一下 Record 关键字是怎么用的,以及它有什么特性。

Record 关键定义的类是不可变类;
Record 定义的类需要将所有成员变量通过参数的形式定义;
Record 定义的类默认会生成全部参数的构造方法;
Record 定义的类中可以定义静态方法;
Record 定义的类可以提供紧凑的方式进行参数校验;
上面的五点里面前三点我们在之前的例子中都可以看出来,在定义和使用的时候可以明显的看到,如下所示。

public record Teacher(String name, List students, Address address, Map<String, String> metadata) {
}//1,2
Teacher teacher = new Teacher(“Java极客技术”, students, address, metadata);//3
下面我们看下第四点和第五点,关于第四点我们可以在 Record 类中定义静态方法用来默认初始化对象,如下所示,通过这种方式我们可以写出更简洁的代码。

public static Teacher of() {
return new Teacher(“Java极客技术”, new ArrayList<>(), new Address(), new HashMap<>());
}

public static Teacher of(String name) {
return new Teacher(name, new ArrayList<>(), new Address(), new HashMap<>());
}
在使用的时候,我们就可以直接通过类名引用静态方法就可以了,如下所示

Teacher teacher = Teacher.of();
接下来我们看看什么叫紧凑的方式进行参数校验,试想一下,如果我们需要校验在沟通 Teacher 对象的时候,student 成员变量不能为空,在我们以前的写法里面只要在构造方法里面进行一下判空就可以了,但是对于 Record 的形式,我们没有显示的创建构造方法,那我们应该如何进行判断呢?答案如下

public Teacher {
if (null == students || students.size() == 0) {
throw new IllegalArgumentException();
}
}

可以看到我们通过一种紧凑的构造方法的形式来进行了参数的校验,这种写法跟我们普通的构造方法是不一样的,没有方法参数,怎么样是不是很神奇。

总结
有的人说Java 的 Record 的新特性是为了让大家不使用 Lombok 的,阿粉倒是觉得不见得,毕竟 Lombok 用起来是真的香,而且 Record 也只能是定义不可变类,在某些情况下使用还是有局限性的,不可变类的使用场景并不是很多。

基于Android开发的音乐播放器小程序带后端(附带学习源码)相关推荐

  1. 张利国,龚海平,王植萌.android移动开发入门与进阶,开题报告-基于Android的手机音乐播放器的设计与实现.doc...

    盐城师范学院 毕业设计开题报告 题 目: 基于android的手机音乐播放器 的设计与实现 姓 名: 二级学院: 信息工程学院 专 业: 软件工程 班 级: 12(1) 学 号: 指导教师: 职称: ...

  2. .net vue漂亮登录界面_基于 electron-vue 开发的音乐播放器「实践」

    作者:XiaoTuGou 转发链接:https://github.com/SmallRuralDog 前言 基于 electron-vue 开发的音乐播放器,界面模仿QQ音乐. 技术栈electron ...

  3. [内附完整源码和文档] 基于Android的手机音乐播放器的设计与实现

    摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节 ...

  4. 基于android的在线音乐播放器app设计

    Android是Google公司公布的基于Linux内核的手机操作系统,其代码属于完全开放,为开源软件开发人员提供使用方便的框架和平台.,本文以Android开发平台为基础,介绍了音乐播放器的开发.首 ...

  5. 基于Android的手机音乐播放器的设计与实现

    源码及论文下载:http://www.byamd.xyz/tag/android/ 摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活 ...

  6. 基于android系统的音乐播放器,基于Android系统的音乐播放器软件设计与实现.doc

    基于Android平台的音乐播放器 The Development of Mobile Music Player Based on Android platform system 学生学号: 学生姓名 ...

  7. android音乐播放器 毕业论文,毕业论文-- 基于Android系统的音乐播放器的实现 .doc...

    毕业论文-- 基于Android系统的音乐播放器的实现 .doc 还剩 31页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! ...

  8. android音乐播放器课程设计报告,基于android平台的音乐播放器的课程设计报告.docx...

    基于android平台的音乐播放器的课程设计报告 - PAGE - PAGE 17 - 吉 首 大 学 JISHOU UNIVERSITY <疯狂Android讲义>课程设计 报 告 书 ...

  9. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

最新文章

  1. 机器学习 LR getA()
  2. css/js压缩工具
  3. PHP-FPM,Nginx,FastCGI 三者之间的关系
  4. 你知道Java 8 的方法引用吗
  5. 性能测试 (四) 常用指标
  6. 在C语言中 下面标识符非法的是,下面哪一项在Java中是非法的标识符? 答案:Youme...
  7. android自动软键盘,Android自定义软键盘
  8. vc 将已有项目打包成dll 并应用于其他项目_.NET混淆器 Dotfuscator使用教程:保护你的应用之存档报告文件...
  9. 解决windows指纹登录不灵问题
  10. jxls向右循环为什么会间隔单元格_VBA中单元格的Offset属性,你是否能灵活的利用呢?...
  11. spring之IOC和DI关系
  12. python小课文件_[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答...
  13. 科技部:推进人工智能和实体经济深度融合 壮大智能经济
  14. 在Linux使用exec执行命令时报的哪些错
  15. HDU 2256(矩阵快速幂)
  16. 【初级03】java JVM核心技术(3): jvm调优
  17. 基于Java的学生成绩管理系统
  18. python代码解读_python源代码解读
  19. springcloud配置中心config上线时配置文件被其他服务无法读取的两种情况
  20. 将心比心,你的人生道路才会更宽广

热门文章

  1. PC如何支持SMB2
  2. HTML页面table中文字不以省略号显示
  3. python多进程、多线程
  4. JavaScript中的 弹出窗口
  5. other os和windows uefi mode_multicast-6 dense-mode - 梅利333
  6. 用飞桨扛起日本分类竞赛头旗!绽放你的能量!—— 训练篇(一)
  7. CSS学习笔记(详细)- 基础
  8. kettle工具介绍和基本使用
  9. centOS7 如何启动/停止/重启MySQL
  10. 估计的商是什么意思_估算是什么意思?