JAVA 泛型类,限制泛型和泛型方法

   我在学习集合的时候对泛型还不太了解,只是觉得用了泛型之后能向自己的集合里加入自己指定类型的对象,可以减少数据类型的转换。那么,脱离集合后,泛型到底该如何使用。今天碰巧看了一段关于泛型的讲解,觉得泛型也没有自己想象中那么难,于是将自己的心得分享出来,希望能帮到有需要的人。

泛型的知识点大概有:泛型类,限制泛型,泛型方法,泛型接口。

泛型类

下面泛型类的例子就非常简单明了了,泛型类一般只需在类名后加<T>符号(T表示一种数据类型,像Integer,String),里面的字母是可以随便取的,如A,B,C

public class CC<T> {
public T ob;
public CC(T a) {
	this.ob = a;
}
public T getOb() {
	return ob;
}
public void setOb(T ob) {
	this.ob = ob;
}
}


public class Textcc {

	public static void main(String[] args) {
		CC<Integer> i = new CC<Integer>(5);
		System.out.println(i.getOb());//5
        
		CC<String> s = new CC<String>("泛型好简单啊");
		System.out.println(s.getOb());//泛型好简单啊
	}

}

限制泛型

其实限制泛型也非常的简单,就在类名后加<T extends ?(这个问号代表一个父类)>,像下面例子里的Demo<T extends Animal>,表示的是往Demo装的对象必须是Animal类型或者继承Animal的子类类型,如Demo<Animal> animal = new Demo<Animal>(new Animal()); 放其它类型的对象则会编译出错。
 

package fanxing;

public class Animal {
public void print() {
	System.out.println("我是动物");
}
}



package fanxing;

public class Cat extends Animal {
public void print() {
	System.out.println("I am a cat");
}
}


package fanxing;

public class Dog extends Animal {
public void print() {
	System.out.println("I am a dog");
}
}


package fanxing;

public class Demo<T extends Animal> {
public T t;

public Demo(T t) {
	super();
	this.t = t;
}

public T getT() {
	return t;
}

public void setT(T t) {
	this.t = t;
}
public void print() {
	System.out.println("T的类型是:"+t.getClass().getName());
}
}

package fanxing;

public class T_testDemo {

	public static void main(String[] args) {
		Demo<Animal> animal = new Demo<Animal>(new Animal());
		Animal a = animal.getT();
		a.print();//我是动物
		
		Demo<Dog> dog = new Demo<Dog>(new Dog());
		Dog d = dog.getT();
		d.print();//I am a dog
		
		Demo<Cat> cat = new Demo<Cat>(new Cat());
		Cat c = cat.getT();
		c.print();//I am a cat
	}

}

泛型通配符

package fanxing;

public class TestTPF {
    public static void take(Demo<?> d) {
    	d.print();
    }
	public static void main(String[] args) {
		Demo<Dog> dog = new Demo<Dog>(new Dog());
	    take(dog);
	    Demo<Cat> cat = new Demo<Cat>(new Cat());
	    take(cat);
	}

}

泛型方法

可以通过泛型输出这样的数组

或者可以指定只有某种对象才能使用这种方法,这里表示只有Dog类及其子类对象才能使用f方法,其他对象则编译出错。

package fanxing;

public class Fxway {
	 public static<E> void print(E[] t) {
	    	for(E t1:t) {
	    		System.out.println(t1);
	    	}
	    }
    public static<T extends Dog> void f(T t) {
    	System.out.println("T的类型:"+t.getClass().getName());
    }
   
	public static void main(String[] args) {
           Integer[] a = {1, 2, 3, 4};
	   print(a);

           Dog rr = new Dog();
           f(rr);
           Cat r2 = new Cat();
           // f(r2);
	   }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值