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);
}
}
java 泛型类 泛型方法 泛型变量 静态方法泛型 区别汇总
最新推荐文章于 2025-07-03 08:59:45 发布