认识枚举,泛型

1. 认识枚举

  • 枚举类的特点
  • 枚举常见应用场景

2. 泛型

  • 自定义泛型类
  • 自定义泛型接口
  • 自定义泛型方法

1. 枚举

枚举是一种特殊类

枚举类的格式:

修饰符 enum 枚举类名 {
	名称1,名称2,...;
	其他成员...
}

Public enum A {
	x,y,z;
	...
}
注意:

枚举类的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开,这些名称,本质是常量,每个常量都会记住一个枚举类的一个对象

枚举类的特点
A[] as = A.values(); // 拿到全部对象
A a3 = A.valueof("z"); // 拿到单个对象
Public enum A {
	x,y,x;
} // 反编译class文件如下
---------------------------------------------------------------------------------------------
Compiled from "A.java"
Public final class A extends java.lang.Enum<A> {
	public static final A x = new A();
	public static final A y = new A();
	public static final A z = new A();
	public static A[] values(); // 拿到当前全部对象
	public static A valueof(java.lang.String); // 拿到单个对象
}
  1. 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
  2. 枚举类的构造器都是私有的(写不写都只能是私有的),因此枚举类对外不能创建对象
  3. 枚举类都是最终类,不可以被继承
  4. 枚举类中,从第二行开始,可以定义类的其他各种成员
  5. 编译器为枚举类新增了几个方法,并且枚举类都是继承:java.Lang.Enum类,从enum类也会继承到一些方法
枚举类常见的应用场景(做信息标志和分类)

用来表示一组信息,然后作为参数值进行传输

选择定义一个一个的变量来表示一组信息,并作为参数传输,参数值不受约束

选择定义枚举表示一组信息,并作为参数传输,代码可读性好,参数值得到了约束,对使用者更友好,建议使用!

 // 用常量做信息标志
public class Test1 {
    public static void main(String[] args) {
        check(Constant.BOY); // 用户可以传入任何值,不受约束
    }

    public static void check(int sex) {
        switch(sex) {
            case Constant.BOY:
                System.out.println("展示一些男生喜欢的事物");
                break;
            case Constant.GIRL:
                System.out.println("展示一些女生喜欢的事物");
                break;
        }
    }
}
---------------------------------------------------------------------------------------------
public class Constant {
    public static final int BOY = 0;
    public static final int GIRL = 1;
}

// 用枚举做信息标志和分类可读性比较好,比较严谨
public class Test1 {
    public static void main(String[] args) {
        check(Constant2.BOY);
    }

    public static void check(Constant2 sex) {
        switch (sex) {
            case BOY:
                System.out.println("展示一些男生喜欢的事物");
                break;
            case GIRL:
                System.out.println("展示一些女生喜欢的事物");
                break;
        }
    }
}
---------------------------------------------------------------------------------------------
public enum Constant2 {
    BOY,GIRL;
}

2. 泛型

定义类、接口、方法时,同时声明了一个或者多个类型变量(如:),称为泛型类,泛型接口,泛型方法,它们通称为泛型

Public class ArrayList(E) {

}

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常

泛型的本质:把具体的数据类型作为参数传给类型变量

1. 泛型类
修饰符 class 类名<类型变量,类型变量,...> {

}

Public class ArrayList<E> {

}
2. 泛型接口
修饰符 interface 接口名<类型变量,类型变量,...> {

}

Public interface A<E> {

}
注意:

类型变量建议用大写的英文字母,常用的有:E、T、K、V等

通配符:就是"?",可以在使用泛型的时候代表一切类型,E、T、K、V,是在定义泛型的时候使用

泛型的上下限:

  • 泛型上限:? extends Animal : ? 能接收的必须是Animal或者其子类
  • 泛型下限:?super Animal :?能接收的必须是Animal或者其父类
3. 泛型方法
修饰符 <类型变量,类型变量,...> 返回值类型 方法名(形参列表) {

}

Public static <T> void test(T t) {

}

// 在泛型类里出现的方法,不是泛型方法,类型变量E不是这个方法自己定义的,
   而是泛型类声明的给到这些方法使用的,像这些方法没有自己定义类型变量,
   而是用别人的类型变量,它就不是泛型方法
Public E get(int index) { (x)

}
泛型的擦除问题和注意事项
  • 泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除
  • 泛型不支持基本数据类型,只能支持对象类型(引用数据类型)
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeConverter是C#中一个非常有用的工具类,它可以将一个类型转换成另一个类型。ConvertFrom方法是TypeConverter类中的一个方法,可以将一个字符串表示的值转换成目标类型。下面是一个示例代码,演示了如何使用TypeConverter和ConvertFrom方法将字符串转换成枚举泛型、颜色和字体属性: ```csharp using System; using System.ComponentModel; using System.Drawing; class Program { static void Main(string[] args) { // 将字符串转换成枚举类型 string enumValue = "Red"; Color color = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFrom(enumValue); Console.WriteLine(color); // 将字符串转换成泛型类型 string genericValue = "123"; int number = (int)TypeDescriptor.GetConverter(typeof(int)).ConvertFrom(genericValue); Console.WriteLine(number); // 将字符串转换成颜色类型 string colorValue = "255,0,0"; Color color2 = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFrom(colorValue); Console.WriteLine(color2); // 将字符串转换成字体类型 string fontValue = "Arial, 12pt"; Font font = (Font)TypeDescriptor.GetConverter(typeof(Font)).ConvertFrom(fontValue); Console.WriteLine(font.Name + ", " + font.Size); } } ``` 在上述代码中,我们首先使用TypeDescriptor获取Color、int、Font类的TypeConverter,并使用ConvertFrom方法将字符串转换成相应的类型。需要注意的是,在将字符串转换成泛型类型时,需要将字符串表示的值与目标类型的类型参数匹配。如果类型不匹配,将会抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值