Q:记学习枚举过程中的一个小问题

Qt 枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他 前言   之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。   最近读Qt文档时偶然间发现,Qt内核其实已经提供了这个转换机制,使得我们能用很少的代码完成枚举量和字符串的转换,甚至还能实现其他更酷更强大的功能,下面我们就来看看如何使 阅读详情

在学习有关java枚举的时候,我们知道了所有的枚举类型均是继承自java.lang.Enum类的,且所有的枚举常量均是该枚举类型的一个对象,且对象名即为该枚举常量的名称。

例子如下:

源码:

public enum T {

    SPRING,SUMMER,AUTUMN,WINTER;

}

 

反编译后的代码:

public final class T extends Enum

{

    private T(String s, int i)

    {

        super(s, i);

    }

    public static T[] values()

    {

        return (T[])$VALUES.clone();

    }

 

    public static T valueOf(String s)

    {

        return (T)Enum.valueOf(T, s);

    }

 

    public static final T SPRING;

    public static final T SUMMER;

    public static final T AUTUMN;

    public static final T WINTER;

    private static final T $VALUES[];

    static

    {

        SPRING = new T("SPRING", 0);

        SUMMER = new T("SUMMER", 1);

        AUTUMN = new T("AUTUMN", 2);

        WINTER = new T("WINTER", 3);

        $VALUES = (new T[] {

            SPRING, SUMMER, AUTUMN, WINTER

        });

    }

}

在写代码的时候,由于输入法切换的问题,发现枚举常量的常量名称居然是可以使用中文的。

代码如下:

public enum Spring

{

春天;

}

class Test

{

public static void main(String[] args)

{

System.out.println(Spring.春天);

}

}

其编译器并没有报错,且顺利的通过了编译。

 

对以上枚举类的代码进行反编译,得到如下的结果。



发现,其对象名为中文。而在java的命名规范中,只允许用美元符号$,英文字母,数字,下划线作为命名的元素。那么如今反编译的结果中出现了中文的情况,这是什么回事呢?

经过分析和查找相关资料,发现,java其实是支持中文类名、方法名、属性名,并且不会因为乱码问题导致运行期链接失败。这是Java内核支持UTF-8这一特性决定的。但是Java语言规范里并不支持这一用法。所以,如下的代码运行起来是完全没有问题的。

package other.jdk1_5;

/**

 * 一个骚操作,使用中文对变量和方法进行命名

 * @author 学徒

 *

 */

public class 人

{

private String 名字;

private int 年龄;

public String get名字()

{

return 名字;

}

public void set名字(String 名字)

{

this.名字 = 名字;

}

public int get年龄()

{

return 年龄;

}

public void set年龄(int 年龄)

{

this.年龄 = 年龄;

}

public static void main(String[] args)

{

人 小明=new 人();

小明.set名字("小明");

System.out.println(小明.get名字());

}

}

 

 

使用C++实现Q学习算法求解迷宫问题 C++是一种静态类型、编译式、通用的编程语言,它支持过程化编程、面向对象编程和泛型编程。C++是C语言的一个超集,因此它继承了C语言的许多特性,如低级内存操作和控制结构。C++提供了类和对象的概念,使得程序设计可以更加模块化,易于管理和复用。C++的基本语法包括数据类型、变量声明、运算符、控制结构和函数等。数据类型分为基本类型、构造类型和指针类型。基本类型包括整型、浮点型、字符型和布尔型。构造类型由基本类型和构造类型组合而成,如数组、结构体、联合体和枚举等。指针类型则用于存储内存地址。 阅读详情

相关推荐

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

@NotNull 和 @NotEmpty 和@NotBlank 区别

最近在使用hibernate validator时出现了下面这个错误,经过查阅之后总结一下这三个注解的区别 javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint-实体报错 @NotEmpty 用在集合类上面 @NotBlank 用在String上面 @NotNul...

liu_sisi的博客 441

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1686

java 枚举类的一个疑问

在.java 加一个枚举类,如下: public enum CmdMsg { FACTORY_MODE(0), AGING_MODE, MUTE_ON_OFF, LISTEN_ONLY;         private int val;         CmdMsg(int val) {             this.val = val;

storm_peng的专栏 404

保姆级教程:在Windows 10上为QT5.15.2配置Android开发环境(含SDK/NDK/JDK避坑指南)

本文提供了一份详细的Windows 10环境下为QT5.15.2配置Android开发环境的保姆级教程,涵盖SDK、NDK、JDK的安装与配置,以及常见问题的避坑指南。通过优化安装流程、解决Gradle下载慢等痛点,帮助开发者快速搭建稳定的编译环境,并提供了模拟器配置和调试技巧,确保开发效率。

weixin_30919571的博客 528

遥感数据处理之MCD19A2数据的处理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 这一段时间一直在做modis气溶胶产品——MCD19A2这个数据的处理工作,总结了一些东西,在这里分享一下。 modis数据一般可以用MCTK和MRT这两个工具进行处理,下面先介绍一下用这两种工具处理MCD19A2的流程: 先解众惑:为什么使用MCD19A2数据处理出来的结果会有3个或4个或5个波段。 这里使用HDF Exploer这个软件,下载链接 1.使用MCTK处......

weixin_42176976的博客 1万+

java枚举enum实用小技巧!不看后悔!!

前言 早就知道枚举了,可却一直不知道合理去应用,今天发现一个小例子,才发现枚举真香! enum应用 public enum CountryEnum { ONE(1,"齐"),TWO(2,"楚"),THREE(3,"燕"),FOUR(4,"赵"),FIVE(5,"魏"),SIX(6,"韩"); private Integer retCode; private Strin...

郝大侠的博客 2519

保姆级教程:从WOS下载文献到Citespace出图,手把手搞定科研可视化(附避坑指南)

本文提供从WOS下载文献到Citespace出图的完整科研可视化指南,涵盖数据采集、清洗、环境配置和可视化优化全流程。特别分享WOS检索技巧、数据清洗方法和Citespace参数设置,帮助科研新手高效生成专业图谱,避开常见技术陷阱。

weixin_29311017的博客 173

枚举类 注解校验

文章目录前提知识1. 对离散值(非枚举)的校验校验注解校验实现使用示例缺点2. 对枚举的校验校验注解校验实现使用示例缺点与一丢丢改进使用示例校验器实现补充内容 java validation内没有对枚举的校验工具,但是离散的枚举值校验确实是有必要的,这里列两种枚举的校验方法,实际大同小异。 前提知识 首先,javax.validation包是提供了方便的自定义校验的入口的,就是javax.vali...

lqadam的博客 3511

中国高精度年度平均气温栅格数据集(1901-2024)

本文基于中国月度平均气温栅格数据集,计算生成1901-2024年1km分辨率的年度平均气温数据集,并按中国省市行政区划进行裁剪。该数据集融合CRU全球数据和WorldClim高分辨率数据,经496个站点验证,具有高时空精度和长时间序列特点,覆盖全国(含港澳台)逾百年气温记录,为气候变化研究、生态水文分析及农业生产评估等提供重要数据支撑。数据格式为Tif,单位为0.1℃,可获取全国、各省及各市三个尺度的气温栅格数据。

PPdata_Academy的博客 1244

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2244

Q:记学习枚举过程中的一个小问题

在学习有关java枚举的时候,我们知道了所有的枚举类型均是继承自java.lang.Enum类的,且所有的枚举常量均是该枚举类型的一个对象,且对象名即为该枚举常量的名称。例子如下:源码: public enum T { SPRING,SUMMER,AUTUMN,WINTER; } 反编译后的代码: public final class T extends ...

diaosangwan0363的博客 105

20、认知负荷理论在教育技术中的应用

本文深入探讨了认知负荷理论(Cognitive Load Theory, CLT)在教育技术中的应用,重点分析了如何通过优化教学设计减少学习者的认知负荷,提高学习效率。文章介绍了认知负荷的三种类型:内在认知负荷、外在认知负荷和germane认知负荷,并结合多媒体学习原则(如模态效应、空间连续性原则、时间连续性原则等)提出了减少外在认知负荷的具体策略。此外,文章通过实证研究和教学案例,展示了认知负荷理论在不同学科和个性化教学中的广泛应用和有效性。最终,文章总结了应用认知负荷理论进行教学设计的具体流程,强调其在

solidity8miner的博客 924

Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他

C++中是没有像其他后辈(C# Java)那样,提供枚举变量到字符串之间的快捷转换功能的,程序要打印枚举变量时,只能额外再写一个转换函数,费时费力,好在,Qt提供了这个功能,通过Q_ENUM宏和Q_FLAG宏,实现了更多更酷的功能。

南海十三叔的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Qt:Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他

之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。 最近读Qt文档时偶然间发现,Qt内核其实已经提供了这个转换机制,使得我们能用很少的代码完成枚举量和字符串的转换,甚至还能实现其他更酷更强大的功能,下面我们就来看看如何使用Qt的这个功

OceanStar的博客 1652

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Qt中的枚举变量,Q_ENUM,Q_FLAG以及Qt中自定义结构体、枚举型做信号参数传递

之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。

宁静致远的博客 2926

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Qt枚举类QMetaEnum使用,结合宏Q_ENUM、Q_FLAG

Q_ENUM 自定义一个枚举变量后,使用Q_ENUM(枚举类型名)注册元对象,之后可以获得一个QMetaEnum 对象,以此作为中介,能够轻松完成枚举量和字符串之间的相互转化。 Q_FLAG Q_ENUM可以实现大部分常用功能,引入Q_FLAG主要为了解决枚举变量的组合使用,增加枚举变量间与或非计算,比如Up是1,Left是4,则Up|Left是5,为一个有意义的值。 Q_ENUM以Log_Level枚举为例,Q_FLAG以Orientation枚举为例: widget.h #ifndef WIDGET_H

weixin_40355471的博客 4040

【QT】枚举常用宏(Q_ENUM,Q_FLAG,Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS)

1. 使用Q_ENUM之前,必须在类中先声明Q_OBJECT或Q_GADGET宏。 2. Q_ENUM(枚举类型)必须放在枚举声明之后,放在前面编译器会报错。 3. 用Q_ENUM声明的枚举,会自动注册到Qt元类型系统,可以使用静态函数QMetaEnum::fromType()来获取QMetaEnum。 4. Qt 中,模板类 QFlags 提供了类型安*的方式保存 enum 的逻辑运算结果,来解决类型不安全的问题。

瞌睡的博客 5424

Qt 枚举变量的高阶技巧 - 枚举值和字符串之间的相互转换 - Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS

一、引用 枚举值宏 所解决的问题: 1、Q_ENUM 能够轻松完成枚举量和字符串之间的相互转化。 枚举参数显示的是 int 类型,如:3。3 这个信息对于我们 调试或打印日志 很不友好。 在方法内,我们并不知道这个 3 代表的是什么。为了解决这个问题,有了个很有用的特性:Q_ENUM 2、Q_FLAG 弥补 C++ 中结构体 无法组合使用,和 缺乏类型检查 的缺点,可以 拥有多个身份,如: enum Roles { Admin = 1, Member = 2 } 上述定义了

LearnLHC的博客 932

Qt Q_ENUM使用 枚举字符串互转

目录1.简述2.代码 1.简述 Qt 中支持了枚举与字符串互转的用法,通过moc编译器实现,所以使用的时候需要添加Q_OBJECT宏,并且声明为public属性,以便外部使用。 2.代码 头文件里这么写 class Dialog : public QDialog { Q_OBJECT public: enum EnmState{ ENM_STATE_A = 0, ENM_STATE_B = 2, ENM_STATE_C, };

我是唐 8103

Qt:Qt中的枚举

简单来讲,Qt还是使用一组宏命令来完成枚举量扩展功能的(正如Qt的其他核心机制一样),这些宏包括Q_ENUM,Q_FLAG,Q_ENUM_NS,Q_FLAG_NS,Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS,Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS都是和元对象系统无关的,可以脱离Q_FLAG单独使用,事实上这两个宏在Qt4就已经存在(不确定更早是否存在),而Q_FLAG是在Qt5.5版本才加入的;

weiweiqiao的专栏 860

Qt中的枚举类型的使用方法

qt

u011555996的博客 4981

【QT】枚举与标志宏实战:从Q_ENUM到Q_FLAG的进阶应用

本文深入探讨了QT中枚举与标志宏的进阶应用,从Q_ENUM的基础使用到Q_FLAG的高级功能,详细介绍了Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS的实际应用。通过实战案例,展示了如何利用这些宏实现类型安全的枚举和标志位操作,提升代码可读性和维护性,特别适用于需要复杂状态管理的QT项目开发。

weixin_33682790的博客 523
上一篇: KandQ:单例模式的七种写法及其相关问题解析
下一篇: K:DHCP工作过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值