首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否允许在java枚举构造函数中使用varargs?

在Java枚举中,构造函数必须是私有的,因为枚举类型的实例应该是预定义的,不应该在运行时动态创建。因此,不能在枚举构造函数中使用可变参数(varargs)。

如果需要为枚举类型提供可变参数的功能,可以考虑使用工厂方法或构建器模式。例如:

代码语言:java
复制
public enum Color {
    RED, GREEN, BLUE;

    private List<Integer> values;

    public static Color of(Integer... values) {
        Color color = RED;
        for (Integer value : values) {
            switch (value) {
                case 1:
                    color = GREEN;
                    break;
                case 2:
                    color = BLUE;
                    break;
            }
        }
        color.values = Arrays.asList(values);
        return color;
    }

    public List<Integer> getValues() {
        return values;
    }
}

在这个例子中,我们使用了一个静态工厂方法of,它接受一个可变参数values,并根据参数的值创建一个枚举实例。然后,我们将这些值存储在枚举实例的values字段中。这样,我们就可以像使用枚举一样使用这个方法,例如:

代码语言:java
复制
Color color = Color.of(1, 2);
System.out.println(color); // 输出:BLUE
System.out.println(color.getValues()); // 输出:[1, 2]

这种方法允许我们在运行时动态创建枚举实例,同时保持了枚举类型的不可变性和线程安全性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么不允许使用 Java 静态构造函数

允许使用 Java 静态构造函数,但是为什么呢?深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么。...Java,每个类都隐式扩展了对象类。...因此,如果构造函数转换静态,我们将无法使用它,这将破坏java的继承性。 正是金九银十跳槽季,为大家收集了2019年最新的面试资料,有文档、有攻略、有视频。...有需要的同学可以公众号【Java知己】,发送【面试】领取最新面试资料攻略!暗号【1024】千万不要发,否则..... Java静态构造方法替代 如果要在类初始化一些静态变量,则可以使用静态块。...请注意,我们无法将参数传递给静态块,因此,如果您要初始化静态变量,则也可以常规构造函数执行此操作。

3K70

Java构造函数、setget方法和toString方法的使用及注意事项

参考链接: 可以重写Java的私有方法吗 一、构造函数 构造函数的最大作用就是创建对象时完成初始化,当我们new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。...:alt+insert,Constructor(构造函数) 这就说明我们创建Test01对象时,会自动调用构造函数完成初始化,这时程序的name属性就成了Wade。...上面说到构造函数是为了new对象传入参数后完成属性的初始化。但是 ,为什么我程序不写构造函数依然可以完成初始化。 1.如果不写构造函数,程序会自动生成一个无参数无操作的构造函数(默认的,隐藏)。...3.如果只写了有参数的构造函数,且不存在无参数的构造函数,将不能以 new XXX(); 这样的方式实例化对象,实例化对象代码,new XXX("***"); 括号的参数必须与构造函数的参数保持一致...所以,比较稳妥也是较常用的方式是java同时定义无参构造函数和有参构造函数,代码如下: public class Test01 {     private String name;     //有参构造函数

1.8K20

JVM性能优化系列-(4) 编写高效Java程序

针对这个两个问题,一种选择是 JavaBeans 模式,在这种模式,调用一个无参数的构造函数来创建对象,然后调用 setter 方法来设置每个必需的参数和可选参数。...构造器、访问方法和readObject使用保护性拷贝(defensive copy)技术。 优先使用复合 继承:会打破封装性 组合:在内部持有一个父类作为成员变量。...接口允许我们构造非层次结构的类型框架,接口可以多继承。...; } 调用的时候,直接使用enum类型,在编译的时候可以直接指定类型,否则编译不通过;并且debug的时候,显示的是enum的常量(APPLE_FUJI这样的),可以一眼看出是否用错;最后由于枚举导出的常量域...带行为的枚举 首先必须明白,java里的枚举就是一个类,枚举的每个对象,是这个枚举类的一个实例。 因此我们可以编写下面的枚举类,并且提供相应的计算方法。

22420

Java实例教程(下)

for循环通过数组Java数组第二小数Java阵列第3大号Java数组最小的数字Java数组第3个最小的数字Java数组最大的数字  Java数组第二大数字Java'for loop'Java构造函数同名类...Java默认构造函数Java参数化构造函数构造函数Java重载  Java拷贝构造函数Java静态方法Java静态块Java这个关键字Java StringTokenizer类使用递归的Java Factorial...示例删除字符Java示例替换字符串Java示例字符串反向Java示例从命令行反向字符串Java示例字符串搜索  Java示例String对象搜索Java示例拆分字符串Java示例字符串拆分Java...数据结构创建二叉树Java示例使用Enum和Switch语句Java示例使用Enum-SwitchJava示例使用枚举构造方法Java示例使用For和Foreach循环Java示例Foreach循环 ...Java示例使用带有方法的VarargsJava的Varargs示例带有方法重载的Java示例Varargs带有方法重载的示例VarargsJava示例Java示例文件路径比较Java示例新文件创建

2.9K20

nextline函数_JAVAScanner的next()和nextLine()为什么不能一起使用

Java 输入一直是一个坑,本来一直用 Scanner,但一直搞不懂换行符啥的,就用 BufferReader ,但前不久大疆笔试需要持续输入,早忘了 Scanner 怎么写,而那个场景用 Scanner...回车符 “\r” 它被丢弃缓冲区,现在缓冲区,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器扫描过程判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列的函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 的时候会碰到读取空字符串的情况 解决方案:输入都用...nextLine ,做格式转换 输入 next 系列函数调用后,中间调用一次 nextLine 调用去掉了回车符后,再调用一次 nextLine 调用真正输入我们的数据 都使用 nextLine: class

2.6K10

2018-04-06 JDK 新特性总览

JDK5新特性 自动装箱与拆箱 枚举 静态导入 可变参数(Varargs) 内省(introspector) 泛型(Generic) For-Each循环 JDK6新特性 Desktop类和...SystemTray类 使用JAXB2来实现对象与XML之间的映射 理解STAX 使用Compiler API 轻量级 Http Server API 插入式注解处理 API 使用Console...JDK7新特性 switch可以使用字符串了 泛型实例化类型自动推断 自定义自动关闭类 新增一些读取环境信息的工具方法 Boolean类型反转,空指针安全,参与位运算 两个char之间的equals...安全的加减乘除|sd 对Java集合( Collections)的增强支持 数值可加下划线 支持二进制数字 try/catch异常扑捉,一个catch可以写多个异常类型用|隔开 可以不必要写...finally语句来关闭资源,只要你try()的括号内部定义要使用的资源 JDK8新特性 接口的默认方法 Lambda表达式 函数式接口 方法与构造函数引用 扩展了集合类 新的Date API

77140

Java注释:您想知道的一切

注释是Java语言规范的第三版Java语言首次引入的,并首先在Java 5实现。 注释具有多种用途,其中包括: 供编译器  使用的信息 - 编译器可以使用注释来检测错误或禁止显示警告。...在这里,我将解释何处可以使用批注,如何应用批注,Java平台标准版(Java SE API)可用的预定义批注类型。...注释可能适用于包,类型(类,接口,枚举和注释类型),变量(类,实例和局部变量-包括for或while循环中定义的变量),构造函数,方法和参数。...允许的类型是这些类型的原语,字符串,枚举,类,注释和数组,并且默认值不能为null: @Author(name = "Roland", created = "2020/04/16", revision...@SafeVarargs @SafeVarargs批注应用于方法或构造函数时,声明该代码不会对其varargs参数执行潜在的不安全操作。

1.5K10

java的演变历程

java的关键特性 java2 添加了大量新特性 swing和集合框架 改进了java虚拟机和各种编程工具 最重要影响的是Thread类 建议不在使用该类的 suspend() resume() stop...枚举 增强的for-each风格和for循环 可变长度参数(varargs) 静态导入 格式化的i/o 并发实用工具 javase 7 String现在能够控制switch语句...二进制整型字面值 数值字面值的下划线 扩展的try语句 称为带资源的try(try-with-resources) 语句 这种 try语句支持自动资源管理(例如,当流(stream)不再需要时...,现在能够自动关闭它们) 构造泛型实例时的类型推断(借助菱形运算符"<>") 对异常处理进行了增强单个 catch字句能够捕获两个或更多个异常(multi-catch)并重新抛出的异常提供了更好的类型检查...(包括多核系统)的计算机的技术 多核环境提供的优点是可以相当大的程度上提高程序的性能 简化同时执行的任务的创建和使用 自动使用多个处理器 javase 8 lambda表达式 函数式编程

42320

谈谈Java的语法糖

JDK1.5Java语言引入了泛型机制。但是这种泛型机制是通过类型擦除来实现的,即Java的泛型只程序源代码中有效(源代码阶段提供类型检查),在编译后的字节码自动用强制类型转换进行替代。...自动装箱与拆箱使用的过程,其实是一个语法糖,内部还是调用了相应的函数进行转换。...内部类 内部类就是定义一个类内部的类 Java语言中之所以引入内部类,是因为有些时候一个类只另一个类中有用,我们不想让其另外一个地方被使用。...枚举类型 枚举类型就是一些具有相同特性的类常量 java类的定义使用class,枚举类的定义使用enum。...Java的字节码结构,其实并没有枚举类型,枚举类型只是一个语法糖,在编译完成后被编译成一个普通的类。这个类继承java.lang.Enum,并被final关键字修饰。

78330

Java5新特性及使用

四、枚举(Enums) 枚举(enum全称为enumeration)类型是 Java5 新增的类型,存放在java.lang包允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。...关于枚举的介绍,这里就不再细讲了,请参考我以前所整理的Java 枚举知识整理一文。 五、可变参数(Varargs) 1....基本使用 Java5 中提供了可变参数(Varargs),也就是方法定义可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");、print("hello...支持枚举: 可以确定一个类是否是一个枚举,以及一个字段是否代表一个枚举常量。 支持可变参数: 可以确定一个方法或构造方法是否是可变参数方法。...便利的方法: 用于确定一个类是否是本地的、匿名的还是成员类,以及一个类型的简单名称是什么。 java.lang.Class类型标记: 允许使用java.lang.Class的实例作为类型标记。 5.

1.3K30

Java的6颗语法糖

JDK1.5Java语言引入了泛型机制。但是这种泛型机制是通过类型擦除来实现的,即Java的泛型只程序源代码中有效(源代码阶段提供类型检查),在编译后的字节码自动用强制类型转换进行替代。...自动装箱与拆箱使用的过程,其实是一个语法糖,内部还是调用了相应的函数进行转换。...Java语言中之所以引入内部类,是因为有些时候一个类只另一个类中有用,我们不想让其另外一个地方被使用。...枚举类型就是一些具有相同特性的类常量 java类的定义使用class,枚举类的定义使用enum。...Java的字节码结构,其实并没有枚举类型,枚举类型只是一个语法糖,在编译完成后被编译成一个普通的类。这个类继承java.lang.Enum,并被final关键字修饰。

80880

JDK 5 ~ 10 新特性倾情整理!

JDK5新特性 自动装箱与拆箱 枚举 静态导入 可变参数(Varargs) 内省(introspector) 泛型(Generic) For-Each循环 JDK6新特性 Desktop类和SystemTray...类 使用JAXB2来实现对象与XML之间的映射 理解STAX 使用Compiler API 轻量级 Http Server API 插入式注解处理 API 使用Console开发控制台程序 对脚本语言的支持...Common Annotations Java GUI界面的显示 嵌入式数据库Derby Web服务元数据 Jtable的排序和过滤 更简单更强大的JAX-WS JDK7新特性 switch可以使用字符串了...)的增强支持 数值可加下划线 支持二进制数字 try/catch异常扑捉,一个catch可以写多个异常类型用|隔开 可以不必要写finally语句来关闭资源,只要你try()的括号内部定义要使用的资源...JDK8新特性 接口的默认方法 Lambda表达式 函数式接口 方法与构造函数引用 扩展了集合类 新的Date API Annotation多重注解 streams(流) parallel streams

57810

SWIG 官方文档第四部分 - 机翻中文人肉修正

); // gets varargs above }; %varargs 也适用于构造函数、运算符和任何其他接受可变参数的 C++ 编程构造。...非法析构函数名称name。忽略。 • 522.不推荐 %extend 中使用非法的构造函数名称“ name ”,构造函数名称应为“ name ”。.../结构 枚举被导出到类表。...28.6.1 编写自己的自定义包装器 有时,可能需要添加您自己的特殊函数,绕过普通 SWIG 包装器方法,只使用原生 Lua API 调用。这些“本机”函数允许将您自己的代码直接添加到模块。...然而,为了直观地使用用户数据,SWIG 还创建了一组元表。正如上面关于全局变量的部分所见,元表的使用允许直观地使用包装器。为了省力,代码为每个类创建一个元表并将其存储 Lua 的注册表

5.3K40

【Effective Java】Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder

参考链接: Java构造函数链接(带示例) 静态工厂和构造函数都有一个限制:可选参数数量很大时,他们都不能很好地扩展。...由于构造过程分成了多个调用,构建过程JavaBean可能处于不一致状态。类不能通过检查构造函数参数的有效性来保证一致性。...有一种办法可以降低这个缺点:当对象构建完成后,手工“冻结”该对象,并且不允许使用未冻结的对象。不过这种方法不灵便,在实践很少使用。...builder比构造函数的另一个小优点是它能有多个varargs方法参数,而构造函数与普通方法一样只能有一个varargs方法参数。...不过,要记住你将来也许会想增加参数,如果你一开始就使用构造函数或静态工厂,那当参数数目失控时就得增加builder了,此时被废弃的构造函数或静态工厂就会像个怪物一样杵在那儿。

45420

Java 中文官方教程 2022 版(二)

本课程,您将找到有关定义自己的类的信息,包括声明成员变量、方法和构造函数。 您将学会使用您的类来创建对象,以及如何使用您创建的对象。...本课程还涵盖了将类嵌套在其他类以及枚举的内容 类 本节展示了类的结构,以及如何声明字段、方法和构造函数。 对象 本节介绍了创建和使用对象。...还讨论了何时使用哪种方法。 枚举类型 本节介绍了枚举,这是一种特殊的类,允许您定义和使用一组常量。...由于它们具有不同的参数列表,两个构造函数都可以Bicycle声明。与方法一样,Java 平台根据参数列表参数的数量和类型区分构造函数。...这将在后面关于接口和继承的课程讨论。 你可以构造函数的声明中使用访问修饰符来控制哪些其他类可以调用该构造函数

14500

Java核心(二)注解

相信没有 Java 程序猿不知道 Spring 框架的,Spring 框架定义了大量的注解,基于注解,我们可以做到几乎零配置的开发商业项目,如 SpringBoot 就将原来 Spring 使用 XML...其值是 java.lang.RetentionPolicy枚举。...RetentionPolicy.SOURCE : 只源代码级别保留有用,在编译期就丢弃了 RetentionPolicy.CLASS : 在编译期保留有效,在运行期(JVM)开始丢弃;这是默认的保留策略...java.lang.annotation.ElementType 的可用值如下: TYPE : 类、接口、注解、枚举的声明 FIELD : 成员变量,包含枚举的常量的声明 METHOD : 方法的声明...PARAMETER : 正式的参数的声明 CONSTRUCTOR : 构造器的声明 LOCAL_VARIABLE : 局部变量的声明 ANNOTATION_TYPE : 注解类型的声明 PACKAGE

17210
领券