导航:首页 > 研究方法 > 为什么在静态方法中不能使用泛型

为什么在静态方法中不能使用泛型

发布时间:2022-03-02 22:56:06

Ⅰ 还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数

静态变量和静态方法是属于使用泛型参数的基类的,跟泛型无关。
Java目前的泛型还是伪泛型,需要在编译的时候进行强转。

Ⅱ static方法无法访问泛型类的类型参数是什么意思啊

泛型类是在实例化类的时候指明泛型的具体类型,而泛型方法是在调用方法的时候指明泛型的具体类型 。

Ⅲ 【Java基础语法】如何在使用静态方法的时候指定其泛型万分感谢!

举个例子:
public void f(int i, char ch, String s){}
这个方法中有三个参数,分别为int类型的i,char类型的ch,String类型的s。这三个参数的类型都已经指定了,如果实际参数类型和对应参数类型不一致,编译器会出现错误。
如何才能做到可以任意指定参数的类型呢?这个时候可以使用泛型方法。举个例子:
public <A, B, C> void f(A a, B b, C c){}
这个就是所谓的泛型方法,当向方法中传递参数后,编译器会自动推断出参数的类型,如:
f(1, "hello", 123.123);
第一个参数类型为Integer,第二个为String,第三个为Double(自动包装机制让基本类型自动包装成对应的包装类)。
泛型方法的特征就是方法前面有对尖括号<>,尖括号里面的就是类型参数,也就是说类型是个变量,要由实际的参数推断得来。
Java中的方法就是这样获取泛型能力的,还有其他方式。但是static方法比较特殊,如果要使得static方法具有反省能力就必须要使用到上面的方法。
希望能解决你的问题。

Ⅳ 为什么静态成员、静态方法中不能用this和super关键字

因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在 2. 在问题之前先讲super的用法:1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象;2.静态优先于对象存在;3.由上面的1.和2.知:因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。综上,静态方法中不可以出现super关键字。 3. 首先你要明白对象和类的区别。 this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西所有的成员方法,都有一个默认的的参数this(即使是无参的方法),只要是成员方法,编译器就会给你加上this这个参数如:
Class A中 void method1(){}实际上是这样的--------> void method1(A this)
void method2(int x){}实际上是这样的--------> void method2(A this, int x)
而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this 4. 在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名”

Ⅳ Java泛型类为什么不能持有静态泛型变量

这事其实一开始我也不明白,查了很多资料都说是硬性规定:

后来又大神指点了一下,我感觉他说的非常有道理:我把他说的一句话细说成3句你看看.

  1. 静态成员,会第一时间进入内存的,假如你说的泛型成立,你说此刻它泛型属于什么类型?

    明白了不?

  2. 泛型终究还是会被擦除的,只是编译时候帮助不小,这也就等于在说,泛型是在实例化对象的时候,才确定要给出什么类型的参数,懂了没?

  3. 如果按照惯例静态早就进内存了,泛型早已经确定了不是吗?

Ⅵ 为什么静态方法中不能调用动态方法

java在静态方法中使用动态方法的方法是new对象出来,然后用.的方式调用方法:
举例如下:
定义Outer.java:
public class Outer {
private static int size;
public void dostuff() {
size++;
System.out.println("hello,I am called");
}
}
然后在另外的测试类Main中,调用:
public class Main {
public static void main(String[] args) {
Outer outer =new Outer();
outer.dostuff();
}
}

Ⅶ java 静态方法含有泛型 会在调用的时候重新加载吗

泛型的实现原理是类型擦除,对于static<T> void foo(T arg)这一个方法来说,不管代码里的T有多少种类型,运行时JVM中的类型都是Object,这个方法在JVM中实际上是static void foo(Object arg),也就是运行时根本不存在泛型的概念。

Ⅷ java中为什么在方法上定义受限泛型时改为T会不行 这两者有什么区别

?表示一个不确定的类型,? extends Person 就是说已经确定父类是Person类了,然后再满足?是Person类的子类

T表示这个类已经是一个确定的类型,比如T表示String类、Object类或者其他某个具体的类,然后T extends Person意思就是说这个具体的类要继承自Person类,这个明显就有问题,因为一个类继承自另一个类是在class中定义的,所以这里有矛盾

大概就是这个意思!

Ⅸ java泛型问题:我能理解为什么类型参数不能用于静态字段,但不理解为何在静态方法中也不能引用类型参数

这个原理是这样的,静态方法中所能引用的属性必须是静态的,而引用参数是无法声明为静态的,因为静态的属性必须在声明时赴值或者实例化,泛型引用变量在声明的时候根本不知道是什么类型,自然不可能实例化,当然也不能放进静态方法了,手机码字,求支持。不懂加qq详说

Ⅹ Java中,为什么静态方法不能使用类型形参

所为程序,是接顺序一句一句的执行。所以,我们来看这段代码。main方法,程序的入口,拥有a,b两个局部变量。a,b变量值分别为10,20。下一句调用add静态方法,add方法有两个形参a,b,main方法调用add方法时为形参a传值为10,为形参b传值为20。进入add方法,add方法中下一句又为参数a重新赋值为30,此时a的值会变为30。为参数b重新赋值为70,此时b的值变为70。下一句定义一个局部变量sum,sum值为a,b相加为100。下一句打印sum变量值,到此,add方法结束回到main方法。下一句是打印变量a的值,在main方法中a值为10,所以打印10。下一句打印b变量值,在main方法中b的值是20,所以打20。
由于add是静态方法,所以,可以直接用类名.方法名调用。
主方法是程序的入口,是jvm执行程序时所必须的方法。

阅读全文

与为什么在静态方法中不能使用泛型相关的资料

热点内容
车载模块安装方法 浏览:327
如何提高凝聚力的方法 浏览:568
宝马迷你三缸机正时安装方法 浏览:985
腰病的治疗方法 浏览:785
区域平均降水量的常用三种方法 浏览:620
手机充电栏美化方法 浏览:913
参与教学改革创新教学方法 浏览:820
食用豆浆的正确方法 浏览:563
生山药功效与作用及食用方法 浏览:885
联想手机出厂设置方法 浏览:443
辞职时快速脱身的方法 浏览:718
疫情戒掉手机的方法 浏览:893
保健食品植物功效成分检测方法 浏览:819
如何让腿变细简单方法视频 浏览:136
初乳溢出有什么解决方法 浏览:75
铁将军遥控器安装方法 浏览:297
乙肝病毒的检测方法 浏览:398
京城又遇漫天飞絮解决方法 浏览:384
铝门花制作方法视频 浏览:491
提高凝血细胞的最佳方法 浏览:699