`
yuankai08021
  • 浏览: 14797 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

public <T> void method,此处泛型的意思

    博客分类:
  • java
 
阅读更多
今天项目中遇到这样一个方法:
public <T> void method(T var)
不太明白什么意思,后来搜索下几篇文章,自己总结一下,和大家分享。
先看例子:
1.static void fromArrayToCollection(Object[] a, Collection<?> c) {
    for (Object o : a) {
        c.add(o); // compile-time error
    }
}
例子1中Collection<?>这种写法,在调用add方法时是会报错的,因为你不能将一个对象推送到未知类型的集合中,虽然改成Collection<Object> c,编译不出错,但把一个object当做泛型摆入集合中,显然也不合理。

2.static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
    for (T o : a) {
        c.add(o); // Correct
    }
}
例子2中,我们使用了泛型,没有问题,注意:这里方法返回值前的泛型如果不加,会编译出错,这里<T>存在的作用,是为了参数中能够出现T这种数据类型。
具体调用方法:
Collection<String> cs = new ArrayList<String>();
Collection<Number> cn = new ArrayList<Number>();

String[] sa = new String[100];
Integer[] ia = new Integer[100];
Float[] fa = new Float[100];
Number[] na = new Number[100];

// T inferred to be String
fromArrayToCollection(sa, cs);

// T inferred to be Number
fromArrayToCollection(ia, cn);

// T inferred to be Number
fromArrayToCollection(fa, cn);

// T inferred to be Number
fromArrayToCollection(na, cn);


分享到:
评论

相关推荐

    Java泛型学习【转自百度百科】

    4. 泛型方法(Generic Method):在方法声明中使用类型参数,如`public static &lt;T&gt; void printArray(T[] array) {...}`。 二、泛型的边界(Bounds) 1. 上界(Upper Bound):通过extends关键字指定类型参数的最大...

    java泛型深入.pdf

    public void method(List&lt;T&gt; list) { // ... } } ``` Java泛型还支持带有通配符的泛型类型,例如`List&lt;?&gt;`表示未知类型的`List`,这是不可变的。`List&lt;? extends T&gt;`表示`T`类型或其子类型的`List`,而`List&lt;? ...

    第十三章 泛型程序设计

    - 泛型方法可以在类的任何地方定义,与类的泛型参数无关,如`public &lt;T&gt; void printList(List&lt;T&gt; list) {...}`,`printList()`方法接受任何类型的列表。 4. **通配符(Wildcard)** - 用于表示对类型参数的限制,...

    【ASP.NET编程知识】.net泛型通用函数的特殊问题的解决方法.docx

    public static void Sort&lt;T&gt;(T[] array) where T : IComparable&lt;T&gt; { bool flag = false; for (int i = 0; i &lt; array.Length - 1; ++i) { flag = false; for (int j = i + 1; j &lt; array.Length; ++j) { if ...

    泛型和方法

    泛型方法则是在方法签名中使用类型参数,如`public &lt;T&gt; void genericMethod(T t) {...}`。这里,`&lt;T&gt;`声明了一个局部类型参数,只在该方法内部有效。这样,方法可以处理任何类型的参数,而无需进行显式类型转换。 ...

    泛型的反射分析代码可参考复杂未看懂

    例如,如果你有一个泛型方法`public &lt;T&gt; void printList(List&lt;T&gt; list)`,你可以通过`method.getGenericReturnType()`获取到`ParameterizedType`对象,然后调用`getActualTypeArguments()`来获取泛型参数的实际类型...

    Thinking in java学习笔记

    同样,方法也可以使用泛型,如`&lt;T&gt; void method(T t)`,这里的`&lt;T&gt;`称为方法级别的泛型。在静态方法中,泛型声明放在方法前,如`public static &lt;T&gt; void say()`。带返回值的泛型方法如`public static &lt;K, V&gt; Map&lt;K, ...

    C#的泛型C#的泛型

    这段代码展示了如何使用泛型类`Test&lt;T&gt;`。其中`T`代表类型参数,可以是任意数据类型。这里创建了两个不同类型的`Test`实例,一个是整型`Test&lt;int&gt;`,另一个是字符串类型`Test&lt;string&gt;`。每个实例都保存了一个相应...

    Java 基础(4-8) - 泛型机制详解.pdf

    }`,这里的`T`就是一个类型参数,可以在实例化类时指定具体类型,如`Box&lt;String&gt; box = new Box&lt;&gt;();`。 2. **泛型接口**:接口同样可以使用泛型,如`interface Container&lt;T&gt; { void add(T item); }`,实现该接口...

    Populating a Generic Data List with Generic method

    public static void PopulateList&lt;T&gt;(List&lt;T&gt; dataList, IEnumerable&lt;T&gt; source) { if (dataList == null || source == null) return; dataList.Clear(); dataList.AddRange(source); } ``` 在这个例子中,`...

    泛型,泛型擦除,桥接方法

    泛型方法是指在方法中使用类型参数的方法,例如:`public &lt;T&gt; T genericMethod(T t) { return t; }`。泛型方法可以在同一个类中使用不同的类型参数。 泛型的作用包括: 1. 类型安全:使用泛型可以在编译时检查类型...

    队象及队象列表比对

    3. 泛型:泛型的使用包括声明泛型类(如`class MyClass&lt;T&gt;`)、泛型接口(如`interface MyInterface&lt;T&gt;`)和泛型方法(如`public &lt;T&gt; void myMethod(T t)`)。泛型类可以限制实例化时的类型,泛型接口可以约束实现类...

    java 基于泛型与反射的通用 DAO

    这里的`&lt;T&gt;`就是泛型类型,`T`代表任何对象类型。通过这种方式,我们可以创建一个通用的DAO类,不指定具体的实体类,但在子类中指定时,编译器会进行类型检查,避免了类型转换的麻烦。 接着,我们讨论“反射”。...

    JavaGenericsFAQ

    - **定义泛型方法**:同样使用`&lt;T&gt;`语法来指定方法的类型参数,例如`public &lt;T&gt; void method(T t) {...}`。 - **实例化泛型类或调用泛型方法**:使用具体类型作为类型参数进行实例化或调用,例如`GenericClass...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    template&lt;&gt;,藉此告訴編譯器哪些符號是 型別參數( type parameters),如圖 8。 template &lt;typename T&gt; class Rect : public Shape 侯捷觀點 JDK 1.5的泛型實現(Generics in JDK 1.5)7 { ...

    java 泛型方法使用示例

    public &lt;T&gt; T sum(T a, T b) { return a + b; } ``` 在这个例子中,`&lt;T&gt;` 是类型参数,代表某种未知的数据类型,`T` 在方法体内代表相同的类型。 **三、类型参数约束** 在定义类型参数时,可以添加类型约束,...

    《SCJP学习指南》chap7

    - **泛型方法**:可以在非泛型类中定义泛型方法,如 `public &lt;T&gt; void method(T t)`。 - **泛型接口**:定义带有类型参数的接口。 #### 集合框架概述 - **集合框架**是Java中用于存储和操作一组对象的API集合。 - ...

Global site tag (gtag.js) - Google Analytics