常用开发类库支持--UUID及空值处理Optional
一.java常用类库--UUID
--UUID类库的使用非常简单,只需要使用静态方法UUID.randomUUID(就可以正常使用)
1 public class MyUUID {
2 public static void main(String[] args) {
3 System.out.println(UUID.randomUUID());
4 }
5 }
--使用for循环包裹这个输出语句,执行5次输出,观察输出结果
629f5938-978c-4a8f-8f88-e990456f002e
97155521-8b02-4f16-9316-07fbed37cb8e
c2b8a9d6-8d82-4544-9207-3d0ccbee3fd9
064fe1c3-5ec4-4541-9e90-9a9f280f8c8b
62d25115-e9d7-4e97-861c-72e6dca31e40
Process finished with exit code 0
--UUID是一种生成无重复字符串的一种程序类,这种程序类的主要功能是根据时间戳实现一个自动的无重复的字符串
无重复:只不过是它在某种特出情况下定义的无重复,或者说是它出现重复的概率很低,可能是千万亿分之一.查看JAVA文档中的UUID类的实现,一般在获取UUID的时候往往都是随机生成的一个内容,所以可以通过如下方法获得
获取UUID对象:public static UUID randomUUID();
根据字符串获取UUID内容: uuid.toString();
--如果要对一些文件自行自动命名的时候,UUID对象非常好用,例如,网络上的图片的命名结构往往是UUID的结构
二.Optional 类----进行null的相关处理
--在以前进行程序开发的时候,如果是为了防止程序之中出现空指针异常,往往会追加有空对象的验证处理
1 interface IMessage{
2 public String getContent();
3 }
4 class MessageImpl implements IMessage{
5 @Override
6 public String getContent() {
7 return "test";
8 }
9 }
10 class MessageUtil{
11 public static IMessage getMessage(){
12 return new MessageImpl();
13 }
14 public static void useMessage(IMessage msg){
15 System.out.println(msg.getContent()); //有可能出现为null,而导致空指向
16 }
17 }
18 public class MyOptional {
19 public static void main(String[] args) {
20 //如此将会出现空指向异常
21 MessageUtil.useMessage(null);
22 }
23 }
--为了防止出现空指向异常,可以在MessageUtil.useMessage()方法中进行分null值的判断
1 public static void useMessage(IMessage msg){
2 if(msg == null){
3 System.out.println("对象为空");
4 }else {
5 System.out.println(msg.getContent());
6 }
7 }
--如此在传统的引用传递之中,我们是被动的进行判断(接收的一方往往都是被动的判断),就像一个工厂在接收原产品时,都需要对原产品进行合格检查,但是,如果在一开始就知道原产品的合格率是百分百,那么就不要在进行生产上线前的合格检查了(合格检查这个动作往往就是被动的).因此为了解决这一问题,java提供了Optional<T>类,该类是JDK1.8中提供的新类,并且现在被广泛使用,在这个类中提供有如下的操作方法
返回空的数据:static <T> Optional<T> empty() 返回一个空的 Optional实例。
获取数据:T get() 如果 Optional中有一个值,返回值,否则抛出 NoSuchElementException 。
保存数据,但是不允许出现空,如果为空,则抛出异常:static <T> Optional<T> of(T value)
保存数据,允许为空:static <T> Optional<T> ofNullable(T value)
空的时候返回其他数据T orElse(T other)
--范例:修改程序,按照正规结构完成
1 interface IMessage{
2 public String getContent();
3 }
4 class MessageImpl implements IMessage{
5 @Override
6 public String getContent() {
7 return "test";
8 }
9 }
10 class MessageUtil{
11 public static Optional<IMessage> getMessage(){
12 //次操作不允许对象为空,如果未空,则会在此处出现异常
13 return Optional.of(new MessageImpl()); //有对象
14 }
15 public static void useMessage(IMessage msg){
16 if(msg == null){
17 System.out.println("对象为空");
18 }else {
19 System.out.println(msg.getContent());
20 }
21 }
22 }
23 public class MyOptional {
24 public static void main(String[] args) {
25 IMessage iMessage = MessageUtil.getMessage().get(); //获取数据
26 MessageUtil.useMessage(iMessage);
27 }
28 }
--这样修改代码结构会,如果值为空null,则会在保存处出现异常:
--运行结果
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at 常用类库.optional.MessageUtil.getMessage(MyOptional.java:21)
at 常用类库.optional.MyOptional.main(MyOptional.java:33)
Process finished with exit code 1
--如此可以明确的保证在获取处所得到的对象不为空,由于Optional类中允许保存有null的内容,所以在数据获取的时候也可以进行null的处理,但是如果为空,则在使用get()获取数据的时候就会存在这样的信息
--范例 处理空值
1 package 常用类库.optional;
2
3 import java.util.Optional;
4
5 /**
6 * @author : S K Y
7 * @version :0.0.1
8 */
9 interface IMessage{
10 public String getContent();
11 }
12 class MessageImpl implements IMessage{
13 @Override
14 public String getContent() {
15 return "test";
16 }
17 }
18 class MessageUtil{
19 public static Optional<IMessage> getMessage(){
20 //次操作不允许对象为空,如果未空,则会在此处出现异常
21 return Optional.ofNullable(null); //有对象
22 }
23 public static void useMessage(IMessage msg){
24 if(msg == null){
25 System.out.println("对象为空");
26 }else {
27 System.out.println(msg.getContent());
28 }
29 }
30 }
31 public class MyOptional {
32 public static void main(String[] args) {
33 IMessage iMessage = MessageUtil.getMessage().get();
34 MessageUtil.useMessage(iMessage);
35 }
36 }
--此时将会出现如下异常
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at 常用类库.optional.MyOptional.main(MyOptional.java:33)
Process finished with exit code 1
--此时可以将代码修改时使用orElse()方法来获取数据
public class MyOptional {
public static void main(String[] args) {
IMessage iMessage = MessageUtil.getMessage().orElse(new MessageImpl());
MessageUtil.useMessage(iMessage);
}
}
--在所有引用数据类型的操作处理之中,null是一个重要的技术问题,所以来讲,JDK1.8后提供的这个新的类对于空值的处理很有帮助