/**
* 测试泛型方法 非静态方法 静态方法
*/
public class Test4 {
//不在类的声明上使用泛型
public <T> void setName(T name){
//在返回值类型前面加<>泛型 泛型T在方法内有效 可以在返回值类型、形参列表和方法体内使用T
System.out.println(name);
public <T> T getName(T name){
return name;
public static void main(String[
args) {
Test4 t4 = new Test4();
t4.setName(123);
//泛型方法在调用时不需要<>声明类型 编译会自行判断
//这里传入123 编译判断为Integer 将T变为该类型
t4.setName(\"asd\");
//每次调用不会互相影响 每次独立判定T的类型
Integer name = t4.getName(455);
//在定义泛型方法时虽然set get方法都是<T> 但两个的T不相干 泛型方法与泛型方法之间不统一类型
System.out.println(name);
String name1 = t4.getName(\"qwe\");
//每次调用不互相影响
System.out.println(name1);
class Test5<T>{
//定义泛型类
private T flag;
public void setFlag(T flag){
//非静态方法 使用外部调用时设定的T类型
this.flag = flag;
public T getFlag(){
//T可以用在返回类型、形参列表和方法体中
return this.flag;
public <T> void printName(T name){
//设定泛型非静态方法 泛型方法中的T不再是泛型类中的T 方法内调用方法的T
System.out.println(name);
public static <T> T getName(T name){
//泛型静态方法无法调用泛型类中的T 必须在方法上定义泛型 方法内也无法使用泛型类的T
return name;
public static void main(String[
args) {
Test5<Integer> i5 = new Test5<>();
//设定类的T为Integer
i5.setFlag(5);
System.out.println(i5.getFlag());
//调用类的T的非静态方法 随类变为了Integer
i5.printName(\"asd\");
//泛型非静态方法 编译时自行判断方法的T 这里没有调用类的Integer
//非静态方法既可以通过泛型类的T设定类型 也可以通过方法声明<T>自己设定
Boolean name = Test5.getName(true);
//泛型静态方法只能通过方法声明T 调用时同样不需要<>设定
if (name){
System.out.println(name);
【Java|java泛型方法】
- javascript|Web前端:什么时候使用React? 什么时候使用React Native?
- 米家|JAVA等主流编程语言有无可能代替ABAP?
- Java|当你选对了赛道,没有什么不可以!
- 锐龙|Java:C与Java的10个主要区别
- 飞利浦·斯塔克|Java:C与Java的10个主要区别
- Java|java枚举enumeration
- |Java之路-线程池-为什么使用线程池?(001)
- Java|“5W1H”——工业设计师建模之前应该做的事
- javascript|Web前端:最佳UI框架的详细指南
- Java|华为号召力不减,12G+512G预约量破10万,哪些人在买华为?