java静态方法泛型
㈠ 如何调用别人写好的泛型类我下载了一个泛型类,但是里面有一些静态方法,怎么调用啊哪位指点一下
namespace.class.staticmethod()
㈡ java中!泛型中的静态方法是不是不用类名加方法名还是直接通过方法名就可以调用啊!下面图片为静态
亲,你这里面不牵涉泛型。
静态方法里只能调用本类的静态方法,所以你的toarray必须是静态才能被main调用。静态方法在其他类中可以直接通过类名.方法调用
㈢ 还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数
静态变量和静态方法是属于使用泛型参数的基类的,跟泛型无关。
Java目前的泛型还是伪泛型,需要在编译的时候进行强转。
㈣ Java泛型类为什么不能持有静态泛型变量
这事其实一开始我也不明白,查了很多资料都说是硬性规定:
后来又大神指点了一下,我感觉他说的非常有道理:我把他说的一句话细说成3句你看看.
静态成员,会第一时间进入内存的,假如你说的泛型成立,你说此刻它泛型属于什么类型?
明白了不?
泛型终究还是会被擦除的,只是编译时候帮助不小,这也就等于在说,泛型是在实例化对象的时候,才确定要给出什么类型的参数,懂了没?
如果按照惯例静态早就进内存了,泛型早已经确定了不是吗?
㈤ java泛型“public static <T> void display(T t)”这是泛型方法这个<T>在void前什么作用
这个单独用感觉没什么意义 应该是用来对T做限制的 比如<T extends 某个类型> 限制T只能是什么的之类
㈥ java 静态方法含有泛型 会在调用的时候重新加载吗
泛型的实现原理是类型擦除,对于static<T> void foo(T arg)这一个方法来说,不管代码里的T有多少种类型,运行时JVM中的类型都是Object,这个方法在JVM中实际上是static void foo(Object arg),也就是运行时根本不存在泛型的概念。
㈦ java泛型问题:我能理解为什么类型参数不能用于静态字段,但不理解为何在静态方法中也不能引用类型参数
这个原理是这样的,静态方法中所能引用的属性必须是静态的,而引用参数是无法声明为静态的,因为静态的属性必须在声明时赴值或者实例化,泛型引用变量在声明的时候根本不知道是什么类型,自然不可能实例化,当然也不能放进静态方法了,手机码字,求支持。不懂加qq详说
㈧ java代码求解释,关于最大元泛型static方法,求解救啊
这涉及到泛型变体的问题。其实你的疑问点就在于
<AnyType extends Comparable<? super AnyType>>这一长串是什么意思。
首先一步步拆解从最简单开始:为了少写几个字,并排除无关信息的干扰,下面把AnyType简写成T
声明一个泛型函数:
publicstatic<T>TfindMax(T[]arr);
那么要对T进行类型约束,不然光有T没办法调用方法进行比较,用于比较大小的接口是Comparable<T>接口,所以我要求要调用findMax方法,则需要使用的泛型参数是Comparable<T>接口的子类:写法如下:
publicstatic<TextendsComparable<T>>TfindMax(T[]arr);
通过此约束:
Cb=A.<C>findMax(……);//OK,因为C继承了Comparable<B>,C又是B得子类。
这里只开了一个头,如果你能看懂我所说的以上,再来决定下一步问我什么,我继续候着回答。
㈨ java泛型的问题:在静态方法中为什么不能
你好,我觉得最主要的原因是因为泛型擦除。
class Demo<T> {
public void add(T t) {
//...
}
}
编译后通过反编译:
D:\test>javap -s -p Demo
Compiled from "Demo.java"
public class Demo extends java.lang.Object{
public Demo();
Signature: ()V
public void add(java.lang.Object);
Signature: (Ljava/lang/Object;)V
}
所以,非静态方法正是由于需要先有对象,进而在使用泛型的时候可以确定安全检查的限制条件。
Demo<String> d = new Demo<String>() ;
d.add("str") ; //这里你就只能添加String类型的。
而静态方法不需要构件对象,所以他在调用方法是,根本没有判断参数的约束条件,所以虚拟机压根就不希望这种事情发生,所以在编译时就报错了。
㈩ 【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方法具有反省能力就必须要使用到上面的方法。
希望能解决你的问题。