您的位置:首页 > 编程语言 > Java开发

java泛型小结

2016-01-11 10:21 447 查看
我自己写了一个Map类,用来模拟真正的工作Map,来分析java的泛型工作机制。类代码如下:

public class SimpleMap<K, V> {

private Object ks[] = new Object[10];
private Object vs[] = new Object[10];

@SuppressWarnings("unchecked")
public V get(K k) {
V res = null;
for(int i = 0; i < ks.length; i++){
if(k.equals(ks[i])){
res = (V)vs[i];
}
}
return res;
}

public void put(K k, V v) {
for(int i = 0 ; i < ks.length;i++){
if(null == ks[i]){
ks[i] = k;
vs[i] = v;
break;
}

}
}

public static <V,K> V saySomething(K k, V v){
System.out.println(k);
System.out.println(v);
return v;
}


一共三个方法:get 、put、saySomething。

其中get方法模拟Map中的get方法,put方法模拟Map中的put方法。doSomething是一个静态的泛型方法。因为静态泛型比较特殊,因此我单独写了saySomething 方法来测试。

测试类代码如下:

public class MainTest {
public static void main(String[] args) {
testSimpleMap();
}

@SuppressWarnings("unchecked")
public static void testSimpleMap(){
@SuppressWarnings("rawtypes")
SimpleMap sm = new SimpleMap();
sm.put("hello",new Date());
sm.put("second", "world");
System.out.println("hello"+" "+ sm.get("hello").getClass());
System.out.println("second"+" "+ sm.get("second").getClass());

Date date1 = SimpleMap.saySomething("hello", new Date());
System.out.println(date1);
}
}


执行结果如下:

hello class java.util.Date
second class java.lang.String
hello
Mon Jan 11 10:11:39 CST 2016
Mon Jan 11 10:11:39 CST 2016


总结:

1:泛型方法其实作用是在编译期,在编译期的时候,泛型方法可以通过类型检查,发现我们往容器中放入了错误的类型。防止运行时出现转型异常。

2:java泛型可以给我们提供隐式的类型转换功能,不需要手动进行类型转换。

3:自我猜测-java泛型方法,比如上面的get方法,传入参数和返回值都是泛型类型参数。我想在运行时,这些参数都是Object类型的,但是泛型机提供了一种类型转换机制,所以我们在使用的时候,内部都是会经过一次类型转换。因此该方法才可以动态地接受不同类型的参数,并且可以正常返回值。

注意:如果定义类的时候,如果没有显示的设置泛型类型,应该默认都为Object类型

如果定义类的时候,显示设置泛型类型,那么内部应该会有隐式的类型转换过程。

4:静态方法泛型是独立于当前类的,所以需要预先定义泛型参数,如:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: