1.泛型类:
编译阶段就执行了。
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(2);
list.add("s");
list.add(true);
System.out.println(list);
List<String> listl = new ArrayList<String>();
A<String> a1 = new A<String>();
a1.setKey("xxxx");
String s = a1.getKey();
System.out.println(s);
A<Integer> a2 = new A<Integer>();
a2.setKey(2);
}
}
/**
* 此处的泛型T可以任意取名,一般用T
* @author Daniel
*
* @param <T>
*/
class A<T>{
private T key;
public void setKey(T key) {
this.key = key;
}
public T getKey() {
return this.key;
}
}
2.泛型接口:
public class Test1 {
public static void main(String[] args) {
B1<String> b1 = new B1();
B2 b2 = new B2();
}
}
interface IB<T>{
T test(T t);
}
/**
* 未传入实参时,与泛型类的定义相同。在声明类时,需要泛型的声明也一起加入到类中
* @author Daniel
*
* @param <T>
*/
class B1<T> implements IB<T>{
@Override
public T test(T t) {
return t;
}
}
/**
* 如果实现接口时指定泛型的具体数据类型
* 这个类所有实现方法的位置都要泛型替换实际的数据类型
* @author Daniel
*
*/
class B2 implements IB<String>{
@Override
public String test(String t) {
return null;
}
}
3.泛型方法:
public class Test1 {
public static void main(String[] args) {
B1<String> b1 = new B1();
B2 b2 = new B2();
}
}
interface IB<T>{
T test(T t);
}
/**
* 未传入实参时,与泛型类的定义相同。在声明类时,需要泛型的声明也一起加入到类中
* @author Daniel
*
* @param <T>
*/
class B1<T> implements IB<T>{
@Override
public T test(T t) {
return t;
}
}
/**
* 如果实现接口时指定泛型的具体数据类型
* 这个类所有实现方法的位置都要泛型替换实际的数据类型
* @author Daniel
*
*/
class B2 implements IB<String>{
@Override
public String test(String t) {
return null;
}
}
class Cc<E>{
//静态变量中不能用类定义泛型
private E e;
/**
* 无返回值的泛型方法
* @param <T>
* @param s
*/
public <T> void test(T s) {
T t = s;
}
/**
* 有返回值的泛型方法
* @param <T>
* @param s
* @return
*/
public <T> T test1(T s) {
return s;
}
/**
* 形参为可变参数的泛型方法
* @param <T>
* @param strs
*/
public <T> void test2(T...strs) {
for (T s : strs) {
System.out.println(this.e);
}
}
}
4.通配符:
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
Dd d = new Dd();
List<String> l1 = new ArrayList<String>();
d.test(l1);
List<Integer> l2 = new ArrayList<Integer>();
d.test(l2);
List<C1> lc = new ArrayList<C1>();
d.test1(lc);
List<A1> la = new ArrayList<A1>();
// d.test1(la); //报错
List<IAimp> lia = new ArrayList<IAimp>();
d.test3(lia);
// d.test3(la);//不行
}
}
class Dd{
public void test(List<?> list) { //传入不知类型
}
public void test1(List<? extends C1> list ) {//list参数在C1及其子类
}
public void test3(List<? extends IA> list) {//list参数是IA实现类
}
}
class A1{
}
class B1 extends A1{
}
class C1 extends B1{
}
class D1 extends C1{
}
interface IA{
}
class IAimp implements IA{
}
5.枚举类:
/**
* 枚举类
* @author Daniel
*
*/
public class Test3 {
public static void main(String[] args) {
Season spring = Season.SPRING;
spring.showInfo();
spring.test();
}
}
enum Season implements ITest{
//调用构造方法
SPRING("春天","1"),
SUMMER("夏天","2"),
AUTUMN("秋天","3"),
WINTER("冬天","4");
private final String name;
private final String desc;
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public void showInfo(){
System.out.println(this.name + " " + this.desc);
}
@Override
public void test() {
System.out.println("这是实现的Itest方法");
}
}
interface ITest{
void test();
}
6.注解:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.List;
import javax.print.DocFlavor.STRING;
public class Test4 {
@SuppressWarnings("unused")
public static void main(String[] args) {
new TestB().test1();
//抑制警告
@SuppressWarnings("rawtypes")
List list = new ArrayList();
}
}
class TestA{
public void test() {
}
}
class TestB extends TestA{
@TestAnn(id = 100,desc = "姓名")
String name;
//重写
@Override
public void test() {
// TODO Auto-generated method stub
super.test();
}
//过时
@Deprecated
public void test1() {
}
}
@Target(ElementType.FIELD)//注解属性
@Retention(RetentionPolicy.RUNTIME)//生命周期
@Documented
@interface TestAnn{
public int id() default 0;
public String desc() default "";
}