泛型机制语法:
类名<T>
其中,T是泛型的名称,代表某一种类型。
代码:
结果:
class MyClass<T1,T2>{ }
其中,T1和T2为可能被定义的类型。
这样,在实例化指定类型的对象时就可以指定多个类型。例如:
MyClass<Boolean,Float> m=new MyClass<Boolean.float>();
结果:
可见,可以在使用泛型机制时声明一个数组,但是不可以使用泛型来创建数组的实例。
JDK中的集合接口、集合类都被定义了泛型,其中List<E>的泛型E实际上就是element元素的首字母,Map<K,V>的泛型K和V就是key键和value值的首字母。
默认可以使用任何类型来实例化一个泛型类对象,但Java中也对泛型类实例的类型作了限制。语法:
class 类名称<T extends anyClass>
其中,anyClass指某个接口或类。?
使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类。无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。
在泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制。语法:
泛型类名称<? extends List> a=null;
其中,<? extends List>表示类型未知,当需要使用该泛型对象时,可以单独实例化。例如:
A<? extends List> a=null;
a=new A<ArrayList>();
a=new A<LinkedList>();
如果实例化没有实现List接口的泛型对象,编译器会报错。
除了可以实例化一个限制泛型类型的实例,还可以将该实例放置在方法的参数中。例如:
public void doSomething(A<? extends List>a){}
在上述代码中,定义方法有效地限制了传入doSomething()方法的参数类型。
定义为泛型的类和接口也可以被继承与实现。例如,让SubClass类继承ExtendClass的泛型:
class ExtendClass<T1>{}
class SubClass<T1,T2,T3> extends ExtendClass<T1>{}
使用方法:
(1)泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义就是错误的。
(2)泛型的类型个数可以是多个。
(3)可以使用extends关键字限制泛型的类型。
(4)可以使用通配符限制泛型的类型。
使用枚举类型定义常量的语法:
public enum Constants{
Constants_A,
Constants-B,
}
其中,enum是定义枚举类型的关键字。
当需要在程序中使用该常量时,可以使用Constants.Constants_A来表示。
代码:
代码:
结果:
(1)类型安全。
(2)紧凑有效的数据定义。
(3)可以和程序其他部分完美交互。
(4)运行效率高。