泛型还可以同样运用在方法。是否拥有泛型方法与其所在的类是否是泛型类没有关系。

无论何时,只要你能做到,都应该尽量使用泛型方法,如果泛型方法可以取代将整个类整个类泛型化,那么就应该只使用泛型方法。

下面是几个泛型方法的例子。

(1) 利用泛型方法和可变参数列表为List添加元素

 import java.util.ArrayList;
import java.util.List; public class GenericVarargs {
@SafeVarargs
public static <T> List<T> make(T... args) {
List<T> result = new ArrayList<T>();
for (T arg : args) {
result.add(arg);
}
return result;
}
}
         // 利用泛型方法和可变参数列表为List添加元素。
List<Integer> result = GenericVarargs.make(1, 2, 3);
System.out.println(result.get(0) + "/" + result.get(1) + "/" + result.get(2)); // 1/2/3

(2) 一个更通用的对象生成器例子,可以为任何类构造一个Generator,以便用next()更方便批量生成对象

 public interface Generator<T> {
T next();
}
 public class GenerateObject<T> implements Generator<T> {

     private Class<T> type;

     private GenerateObject(Class<T> type) {
this.type = type;
} @Override
public T next() {
try {
return type.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
} public static <T> GenerateObject<T> create(Class<T> type) {
return new GenerateObject<T>(type);
}
}
 public class CountedObject {

     private static int count = 0;

     private final long id = ++count;

     public String toString() {
return "CountedObject " + id;
}
}
         // 一个更通用的对象生成器例子,可以为任何类构造一个Generator,以便更方便批量生成对象
Generator<CountedObject> gen = GenerateObject.create(CountedObject.class);
for (int i = 0; i < 3; i++) {
System.out.println(gen.next());
// CountedObject 1
// CountedObject 2
// CountedObject 3
}

(3) 一个Set的实用工具,可以模拟数学中交集并集的处理

 import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; public class SetUtils { // 两个Set取并集
public static <T> Set<T> union(Set<T> a, Set<T> b) {
Set<T> result = new HashSet<T>(a);
result.addAll(b);
return result;
} // 两个Set取交集
public static <T> Set<T> intersection(Set<T> a, Set<T> b) {
Set<T> result = new HashSet<T>(a);
result.retainAll(b);
return result;
} // 从MainSet减去SubSet
public static <T> Set<T> difference(Set<T> mainset, Set<T> subset) {
Set<T> result = new HashSet<T>(mainset);
result.removeAll(subset);
return result;
} // 取不在交集里的值
public static <T> Set<T> complement(Set<T> a, Set<T> b) {
return difference(union(a, b), intersection(a, b));
} // 打印
public static <T> String printSet(Set<T> set) {
StringBuilder sb = new StringBuilder();
Iterator<T> elem = set.iterator();
while (elem.hasNext()) {
sb.append(elem.next());
if (elem.hasNext()) {
sb.append(", ");
}
}
return sb.toString();
}
}
         // 一个Set的实用工具,可以模拟数学中交集并集的处理
Set<Integer> set1 = new HashSet<>(GenericVarargs.make(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<>(GenericVarargs.make(4, 5, 6, 7, 8));
System.out.println(SetUtils.printSet(SetUtils.union(set1, set2))); // 1, 2, 3, 4, 5, 6, 7, 8
System.out.println(SetUtils.printSet(SetUtils.intersection(set1, set2))); // 4, 5
System.out.println(SetUtils.printSet(SetUtils.difference(set1, set2))); // 1, 2, 3
System.out.println(SetUtils.printSet(SetUtils.difference(set2, set1)));// 6, 7, 8
System.out.println(SetUtils.printSet(SetUtils.complement(set1, set2))); // 1, 2, 3, 6, 7, 8

Java泛型(3):泛型方法的更多相关文章

  1. Java 泛型示例 - 泛型方法,类,接口

    Java Genrics 是 Java 5 中引入的最重要的功能之一. 如果您一直在使用Java Collections并使用版本 5 或更高版本,那么我确定您已经使用过它. Java 中具有集合类的 ...

  2. java泛型-自定义泛型方法与类型推断总结

    下面是自定义泛型方法的练习: package com.mari.generic; import java.util.ArrayList; import java.util.Collection; im ...

  3. java 泛型 -- 泛型类,泛型接口,泛型方法

    泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...

  4. Java 泛型 泛型方法

    Java 泛型 泛型方法 @author ixenos 泛型方法可以定义在普通类中,也可以定义在泛型类中 类型变量放在修饰符(如public static)后面,返回类型的前面 一个static方法无 ...

  5. (一)关于java泛型的学习总结(泛型方法、泛型擦除)

    目录概要 一.泛型方法 二.利用泛型方法的特性实现代码的简化 三. 关于泛型的擦除 四.无界通配符和原生类型区别 五.转型和警告   泛型 一般的类中的属性或方法的参数,只能使用具体的类型:要么是基本 ...

  6. java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)

    JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型.  1.Java泛型  其实Java ...

  7. java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

    对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 1. 概述 泛型在 ...

  8. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  9. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  10. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

随机推荐

  1. 洛谷 P2163 [SHOI2007]园丁的烦恼 (离线sort,树状数组,解决三维偏序问题)

    P2163 [SHOI2007]园丁的烦恼 题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园 ...

  2. 2017 Chinese Multi-University Training, BeihangU Contest

    2017 Chinese Multi-University Training, BeihangU Contest Add More Zero 思路:log10(2^m) = m*log10(2) 代码 ...

  3. 如何用 tensorflow serving 部署服务

    第一步,读一读这篇博客 https://www.jb51.net/article/138932.htm (浅谈Tensorflow模型的保存与恢复加载) 第二步: 参考博客: https://blog ...

  4. php实现浏览器大文件分片上传

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  5. 【luoguP1955 】[NOI2015]程序自动分析--普通并查集

    题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...

  6. poj1737

    Connected Graph POJ - 1737 An undirected graph is a set V of vertices and a set of E∈{V*V} edges.An ...

  7. [C语言]结构体初始化的不同方法

    结构体的定义 struct Test{ int first; double second; }Sample; 方法一 定义时直接赋值 Sample s(1, 1.00); 缺点:必须匹配变量顺序,不能 ...

  8. 最小n个和(优先队列)

    给出两个包含 nn 个整数的数组 AA,BB.分别在 AA, BB 中任意出一个数并且相加,可以得到 n^2n2个和.求这些和中最小的 nn 个. 输入格式输入第一行一个整数 n(1 \le n \l ...

  9. Kettle环境的安装

    Kettle是绿色免安装的,下载完解压之后找到Spoon.bat,直接执行就好 欢迎界面 Kettle主要分为转换和作业2类 新建一个转换demo 创建了一个转换demo后,由于是数据抽取,因此我们抽 ...

  10. ubuntu进行apt-get时候出现Package ssh is not available, but is referred to by another package 错误

    今天在ubuntu进行ssh安装的时候,出现如下错误. Reading package lists... Done Building dependency tree... Done Package s ...