标签:
ArrayList list = new ArrayList(); list.add("str1") System.out.prinntln((String)list.get(0)).length());
ArrayList<String> list = new ArrayList<String>(); list.add("str1"); System.out.println(list.get(0).length());
ArrayList<String> list = new ArrayList<>();
后面会自动添加类型;
public class C { public static <T> T foo(T v) { return null; } } //用法: String ret = C.foo("str");
2. 泛型类
public class C<T> { public T foo(T v) { return null; } } //用法: C<String> instance = new C<String>(); String ret = instance.foo("str");
public class C { public <T> T foo(T v) { return null; } } //用法: C instance = new C(); String ret = instance.foo("str");
4. 泛型类的泛型成员函数
public class C<R> { public <T> T foo(T v1, R v2) { return null; } } //用法: C<String> instance = new C<String>(); Integer ret = instance.foo(1, "str");
public class C<R> { public static <T> T foo(T v1) { return null; } } // (R的泛型没意义) Integer ret = C.foo(1);
public class C { public static <R extends Number> T foo(R v) { return v; } } Integer ret = C.foo(1);
public class C<R extends Number> { public R foo(R v) { return v; } } C<Integer> instance = new C<Integer>(); Integer ret = instance.bar(1);
public class C<T> { public T foo(T v) { return v; } public String bar(int i) { return "" + i; } } C<?> instance = new C<?>(); Object ret = instance.foo(null); // 这个用法没实际作用 String sRet = instance.bar(1); // 主要调用没有类型部分
既然C<?>不用考虑T的类型,那么具体化也可以,如 C<?> instance = new C<String>();
这样设计,创建者能根据自己需要设置类型,而使用者就不用关系类型
C<? super Number> instance = new C<Object>(); Object ret = instance.foo(new Integer(0)); // 接受Number的参数;但返回值Object,一般用于,修改数据。
C<? extends Number> instance = new C<Integer>(); Number ret = instance.foo(null); // 不接收参数,但返回Number,一般用于,获取数据。
public class C<T> { public C<? super T> foo(C<? super T> v) { return v; } public C<? extends T> bar(C<? extends T> v) { return v; } } C<? super Number> s = null; C<? extends Number> e = null; C<? super Number> sInstance = new C<Object>(); C<? super Number> ret1 = sInstance.foo(null); C<?> ret2 = sInstance.bar(e); C<? extends Number> eInstance = new C<Integer>(); C<?> ret3 = eInstance.foo(s); C<? extends Number> ret4 = eInstance.bar(null);
标签:
原文地址:http://www.cnblogs.com/shifting/p/4380483.html