重写enum的valueof方法等

博客介绍了enum对象的常用方法,包括比较顺序、获取枚举类型、名称和序数。还提及了如何自定义枚举的valueOf方法,以及展示了相应的运行结果。

enum 对象的常用方法介绍

int compareTo(E o) 
          比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

           返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

package test;

public class EnumTest {
    public enum Color {
        RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0);
                                                         // 构造枚举值,比如RED(255,0,0)
        private Color(int rv, int gv, int bv) {
            this.redValue = rv;
            this.greenValue = gv;
            this.blueValue = bv;
        }


        private int redValue;                             // 自定义数据域,private为了封装。
        private int greenValue;
        private int blueValue;
        
        public static final Color[] values=Color.values();
        public static Color valueOf(int i) {
            return values[i];
        }
        

        public String toString() {                         // 覆盖了父类Enum的toString()
            return super.toString() + "(" + redValue + "," + greenValue + "," + blueValue + ")";
        }
    }
    
    public enum ColorType{
        Red(Color.RED),
        Blue(Color.BLUE),
        Black(Color.BLACK),
        Yellow(Color.YELLOW),
        Green(Color.GREEN);
        
        private Color colorId;
        private ColorType(Color colorId) {
            this.colorId=colorId;
        }
        
        public static ColorType[] a=ColorType.values();
        public static ColorType valueOf(int i) {
            return a[i];
        }
        
        public String toString() {
            return super.toString()+"-------------->"+colorId.toString();
        }
        
    }

    public static void main(String args[]) {
        // Color colors=new Color(100,200,300); //wrong
        Color color = Color.RED;
        Color colorYellow=Color.YELLOW;
        System.out.println(color);                         // 调用了toString()方法
        System.out.println(color.ordinal());
        System.out.println(color.compareTo(colorYellow));  //返回的是两个枚举值的顺序之差
        System.out.println(Color.valueOf("BLUE"));
        System.out.println(Color.valueOf(1));              //重写valueOf方法  
        
        System.out.println(ColorType.valueOf(2).toString());
    }

}

 

运行结果:

RED(255,0,0)
0
-3
BLUE(0,0,255)
BLUE(0,0,255)
Black-------------->BLACK(0,0,0)

 



自定义方法:

package test;

public class EnumTest3 {
    public enum EnumTest {
        MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
            @Override
            public boolean isRest() {
                return true;
            }
        },
        SUN(0) {
            @Override
            public boolean isRest() {
                return true;
            }
        };
        
        private int value;
        
        private EnumTest(int value) {
            this.value = value;
        }
        
        public int getValue() {
            return value;
        }
        
        public boolean isRest() {
            return false;
        }
    }
    public static void main(String[] args) {
        System.out.println("EnumTest.FRI 的 value = " + EnumTest.SAT.isRest());
    }
}

输出结果:

EnumTest.FRI 的 value = true

 

转载于:https://www.cnblogs.com/qiangqiangqiang/p/7606758.html

在音频信号分析领域,将混合音频中的乐器伴奏与歌唱部分进行有效区分是一项具有重要应用价值的技术挑战,广泛应用于音频后期制作、智能语音系统及数字音乐生产等场景。本文旨在系统阐述如何借助MATLAB这一集成了高级数学计算与算法开发功能的专业平台,构建一套完整的声源分离处理流程。声源分离,常被称作盲源分离,其核心目标是从混合信号中恢复出相互独立的原始成分。整个处理流程通常包含以下六个关键环节:**数据预处理** 首先,利用`audioread`函数将音频文件载入工作环境,随后对信号进行必要的采样率调整与幅度归一化,以确保数据格式符合后续分析要求。**时频特征抽取** 特征提取是区分音乐与人声的基础。常用方法包括短时傅里叶变换(STFT)与梅尔频率倒谱系数(MFCC)。STFT能够刻画信号的时频分布特性,而MFCC则模拟了人类听觉系统的感知机制。MATLAB中可通过`spectrogram`与`melcepst`等函数高效实现这些特征的计算。**分离模型构建** 根据乐器声与歌唱声在统计特性上的差异,可选择不同的数学模型。独立成分分析(ICA)基于信号间的统计独立性假设;非负矩阵分解(NMF)则利用非负约束对频谱进行分解。MATLAB工具箱中提供了`fastica`及`nmf`等函数以支持相应模型的快速搭建。**分离算法实施** 选定模型后,需采用相应算法执行分离操作。例如,FastICA算法通过最大化非高斯性来估计独立分量;NMF则通过交替最小化重构误差来迭代更新基矩阵与系数矩阵。这些算法的目标均为实现混合信号中不同源信号的有效解耦。**结果优化处理** 初步分离的输出往往含有残余噪声或交叉干扰,因此需通过谱减、幅度阈值滤波等后处理手段进一步净化信号,提升听觉质量。**性能量化评估** 分离效果需借助客观指标进行衡量,例如信干噪比(SISNR)或感知语音质量评估(PESQ)。MATLAB环境内可调用如`sisnr`等专用函数,对分离结果的保真度与清晰度进行定量分析。在相关资源文件中,通常提供了涵盖上述各阶段的完整代码实例。通过深入研究这些实现,开发者不仅能够掌握在MATLAB中构建声源分离系统的具体方法,还可在此基础上进行算法改进与参数调优,从而推动音频处理技术的进一步创新与应用拓展。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值