Ⅰ 还是关于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句你看看.
静态成员,会第一时间进入内存的,假如你说的泛型成立,你说此刻它泛型属于什么类型?
明白了不?
泛型终究还是会被擦除的,只是编译时候帮助不小,这也就等于在说,泛型是在实例化对象的时候,才确定要给出什么类型的参数,懂了没?
如果按照惯例静态早就进内存了,泛型早已经确定了不是吗?
Ⅵ 为什么静态方法中不能调用动态方法
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执行程序时所必须的方法。