关于Enum枚举的valueOf方法的使用

所有的枚举都默认继承了java.lang.Enum, 关于父类中的valueOf方法的使用,见如下的代码说明

package cn.cuit.stream;

public enum ActivityType {
    WLY_BARCODE_PRODUCE("01"),
    WLY_BARCODE_OUTBOUND("02"),
    DISTRIBUTER_INBOUND("03"),
    DISTRIBUTER_OUTBOUND("04"),
    TERMINAL_INBOUND("05"),
    CUSTOMER_SCAN_BARCODE("06");
    private  String code;

    ActivityType(String code)
    {
        this.code = code;
    }

    public String getCode()
    {
        return  this.code;
    }

    public void setCode(String code)
    {
        this.code = code;
    }

    public static ActivityType fromValue(String code)
    {
        for (ActivityType s : ActivityType.values())
        {
            if (s.getCode().equals(code))
            {
                return s;
            }
        }
        return null;
    }

}
package cn.cuit.stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import com.google.common.collect.Lists;

public class Main {
	public static void main(String[] args) {
		List<ActivityType> activityTypes = Lists.newArrayList(ActivityType.CUSTOMER_SCAN_BARCODE,
				ActivityType.DISTRIBUTER_INBOUND, ActivityType.DISTRIBUTER_OUTBOUND, ActivityType.TERMINAL_INBOUND,
				ActivityType.WLY_BARCODE_OUTBOUND, ActivityType.WLY_BARCODE_PRODUCE);

		ActivityType valueOf = ActivityType.valueOf(ActivityType.WLY_BARCODE_PRODUCE.toString()); // OK
		ActivityType valueOf0 = ActivityType.valueOf(ActivityType.class, ActivityType.WLY_BARCODE_PRODUCE.toString()); // OK

		System.out.println(ActivityType.WLY_BARCODE_PRODUCE.toString());
		System.out.println(ActivityType.valueOf("WLY_BARCODE_PRODUCE"));
		System.out.println(
				ActivityType.valueOf(ActivityType.WLY_BARCODE_PRODUCE.getDeclaringClass(), "WLY_BARCODE_PRODUCE"));

		ActivityType valueOf3 = ActivityType.valueOf("WLY_BARCODE_PRODUCE"); // OK,不能使用枚举的值,而要使用枚举名
		// ActivityType valueOf1 = ActivityType.valueOf(ActivityType.class, "03"); //
		// 报错,Enum.java:240看具体说明【这个类没有valueOf(String name)一个参数这个方法,但是可以在Java代码中调用,调用时还是走的两个参数的这个valueOf方法】
		// ActivityType valueOf2 = ActivityType.valueOf("03"); // 报错,这个方法没有,但是也可以调

		List<ActivityType> activityTypeList = Arrays.stream("01>02>03>04>05>06".split(">")).map(s -> {
			ActivityType activityType = ActivityType.fromValue(s);
			ActivityType activityType2 = Lists.newArrayList(ActivityType.values()).stream()
					.filter(x -> s.equals(x.getCode())).findFirst().get();
			System.out.println(activityType.getCode() + "---" + activityType2.getCode());
			return activityType;
		}).collect(Collectors.toList());

		// System.out.println(valueOf1);
		// System.out.println(valueOf2);
	}
}

 补充:

********************************* 不积跬步无以至千里,不积小流无以成江海 *********************************

猜你喜欢

转载自blog.csdn.net/weixin_42465125/article/details/89010808
今日推荐