时间:2021-05-19
1.泛型类
1.1普通泛型
复制代码 代码如下:
package test.lujianing;
/**
* 泛型类
* @param <T>
*/
class Test<T>{
private T obj;
public void setValue(T obj){
this.obj =obj;
}
public T getValue(){
System.out.println(obj.getClass().getName());
return obj;
}
}
/**
* 测试泛型类
*/
public class TestOne {
public static void main(String[] args) {
//测试Integer泛型
Test<Integer> t1 = new Test<Integer>();
t1.setValue(5);
Integer i = t1.getValue();
System.out.println(i);
//测试Double泛型
Test<Double> t2 = new Test<Double>();
t2.setValue(5.55D);
Double d = t2.getValue();
System.out.println(d);
//测试String泛型
Test<String> t3 = new Test<String>();
t3.setValue("hello world");
String str =t3.getValue();
System.out.println(str);
}
}
输出结果:
复制代码 代码如下:
java.lang.Integer
5
java.lang.Double
5.55
java.lang.String
hello world
1.2 K/V泛型
复制代码 代码如下:
package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Administrator on 14-3-30.
*/
class TestKV<K,V>{
private Map<K,V> map=new HashMap<K, V>();
public void put(K k, V v) {
map.put(k,v);
}
public V get(K k) {
return map.get(k);
}
}
public class TestFour{
public static void main(String[] args) {
TestKV<String,String> t = new TestKV<String, String>();
t.put("name","jianing");
System.out.println(t.get("name"));
TestKV<String,Integer> t2 = new TestKV<String, Integer>();
t2.put("age",24);
System.out.println(t2.get("age"));
}
}
输出结果:
复制代码 代码如下:
jianing
24
2.泛型接口
复制代码 代码如下:
package test.lujianing;
/**
* 泛型接口
* @param <T>
*/
public interface TestImpl<T> {
public void setValue(T t);
public T getValue();
}
输出结果:
复制代码 代码如下:
1
hello word
3.泛型方法
复制代码 代码如下:
package test.lujianing;
/**
* 泛型方法类
*/
class TestMethod{
/**
* 泛型方法
*/
public <T>T getValue(Object s,Class<T> clazz) {
System.out.println(clazz.getName());
T t =null;
if(clazz.getName().equals("java.lang.Integer")){
Double d = Double.parseDouble(s.toString());
int i =d.intValue();
t=(T)new Integer(i);
}
if(clazz.getName().equals("java.lang.Double")){
t=(T)new Double(s.toString());
}
return t;
}
}
/**
* 泛型方法测试类
*/
public class TestThree {
public static void main(String[] args) {
TestMethod t = new TestMethod();
int i =t.getValue("30.0011",Integer.class);
System.out.println(i);
double d =t.getValue("40.0022",Double.class);
System.out.println(d);
}
}
输出结果:
复制代码 代码如下:
java.lang.Integer
30
java.lang.Double
40.0022
4.限制泛型
在上面的例子中,没有限制class Test<T>类型持有者T的范围,默认限定类型相当于Object。比如我们要限制T为数字接口类型。只需要这么做:class Test<T extends Number>,这样类中的泛型T只能是Number接口的实现类,传入非Number接口编译会出错。
5.通配泛型
复制代码 代码如下:
package test.lujianing;
import java.util.HashMap;
import java.util.Map;
/**
* 通配泛型
*/
public class TestFive {
public static void main(String[] args) {
Map<String,Class<? extends Number>> map = new HashMap<String,Class<? extends Number>>();
map.put("Integer",Integer.class);
map.put("Double",Double.class);
for (Map.Entry<String,Class<? extends Number>> entry : map.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
}
}
}
输出结果:
复制代码 代码如下:
key:Double value:class java.lang.Double
key:Integer value:class java.lang.Integer
简单的例子:针对1.1的例子
复制代码 代码如下:
public static void main(String[] args) {
//测试Integer泛型
Test<Integer> t1 = new Test<Integer>();
t1.setValue(5);
fun(t1);
//测试Double泛型
Test<Double> t2 = new Test<Double>();
t2.setValue(5.55D);
fun(t2);
}
public static void fun(Test<?> t){
System.out.println("通配泛型"+t.getValue());
}
输出结果:
复制代码 代码如下:
java.lang.Integer
通配泛型5
java.lang.Double
通配泛型5.55
6.补充
在泛型中,可能会遇到<T><E>等,T和E分别是Type和Element的首字母。E一般用来表示集合类型中的元素的类型,例如List接口的定义,public interface List<E> extends Collection<E>。这只是一种命名习惯,两者没有本质区别。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java泛型类与泛型方法的定义。分享给大家供大家参考,具体如下:Java泛型类的定义一点睛泛型类定义的语法如下:[访问修饰符]class类名称泛型
本文实例讲述了Java泛型和Class类用法。分享给大家供大家参考,具体如下:一点睛从JDK1.5之后,Java的Class类增加了泛型功能,从而允许使用泛型来
泛型是Java开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码。本文总结了Java泛型的三种形式以及泛型实现原理。泛型泛型的本质
本文实例讲述了Java泛型的使用限制。分享给大家供大家参考,具体如下:一什么情况下不能使用泛型1不能使用泛型的形参创建对象。To=newT();//不允许2在泛
java泛型方法:泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:publicclassTest{}。这样就定义了一个泛型类Test,在