java 泛型类 泛型方法 泛型变量 静态方法泛型 区别汇总

本文通过具体示例介绍了Java泛型的基本概念,包括泛型方法、泛型类的定义及使用方式,并展示了如何在实例中应用泛型以提高代码的复用性和类型安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package xxx.xxxx.demo;

public class FanXingZongJie {
	public static void main(String[] args) {
		F1 f1 = new F1();
		f1.fun1("fun1");
		F2<String> f2 = new F2<String>();
		f2.fun2("fun2");
		System.out.println(f2.fun3("fun3"));
		F3<Integer> f3 = new F3<Integer>();
		f3.set(1234);
		System.out.println(f3.fun4());
		F3.fun6("O(∩_∩);O哈哈~,我又变成String类型了,我和类Class<M>的泛型没有关系。。。");
		F4.fun7(5678);
		
		F5 f5 = new F5();
		try {
			System.out.println(f5.fun8(Class.forName("xxx.xxxx.demo.User")) instanceof User);//true
			System.out.println(f5.fun8(User.class) instanceof User);//true
			System.out.println(f5.fun8(new User().getClass()) instanceof User);//true
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}
}

class F1 {
	public <T> void fun1(T key) {// 是泛型方法 如果没有<T>就不知道 参数T key 中T类型从何而来
		System.out.println("泛型方法 <T>:" + key);
	}
}

class F2<K> {
	public void fun2(K key) {// 不是泛型方法 K是声明 类的时候创建的类型
		System.out.println("不是泛型方法:" + key);
	}

	public K fun3(K key) {// 同样不是泛型方法,因为 方法中没有加<K> K是声明类的时候加的
		return key;
	}
}

class F3<M> {
	private M key;

	// public static M val; 不能用static修饰泛型成员变量   静态方法和变量 不用实例化类就能调用。
	public void set(M key) {
		this.key = key;
	}
	public M fun4() {// 同样不是泛型方法,因为 方法中没有加<M> M是声明类的时候加的
		return this.key;
	}
	// public static void fun5(M val) { //会出错误
	// 因为泛型是要在对象创建的时候才知道是什么类型的,
	// 而对象创建的代码执行先后顺序是static的部分,然后才是构造函数等等。
	// 所以在对象初始化之前static的部分已经执行了,
	// 如果你在静态部分引用的泛型,那么毫无疑问虚拟机根本不知道是什么东西,
	// 因为这个时候类还没有初始化。因此在静态方法、数据域或初始化语句中,为了类而引用class F3<M>声明的泛型类型参数是非法的
	// }
	
	public static <N> void fun6(N val) {
		System.out.println("static 静态方法中 声明的独立泛型<N>,可以使用。"+val);
	}
}

class F4{
	public static <H> void fun7(H key) {
		System.out.println(key);
	}
}

class User{
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
	
}
class F5{
	public <H>H  fun8(Class<H> h) throws InstantiationException, IllegalAccessException {
		H hs = h.newInstance();
		System.out.println(hs);
		return hs;
	}
	public <H> void fun9(Class<H> h) throws InstantiationException, IllegalAccessException {
		H hs = h.newInstance();
		System.out.println(hs);
	}
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值