
你这是Java泛型的一种错误用法,叫做“类型隐藏”,不过编译是可以通过的。
你想要的效果其实应该这么写:
class A{
public <T> void show (String s)
{
Systemoutprintln(s);
}
public static void main(String[] args)
{
A a = new A();
ashow(10); // 此时这里会报错。因为不是String类型的参数
}
}
但是你这么写:
public <String> void show (String s)// 或者public <String> void show (int s)之类的都一样,都是错误的
就导致了类型隐藏,具体警告信息:The type parameter String is hiding the type String
所以编译器会认为其实你写的是:
public <T> void show (T s)所以即使参数是int类型,show()方法也能正常工作。
List<Object> list = new ArrayList<Object>();
listadd(new String("aaa"));
Systemoutprintln(listget(0)getClass()getName());
输出的值是javalangString,这样就能取得泛型的具体类型,不知道你是不是要这个意思
不一样,第一个classgetName();是Class对象的一个方法,它会返回一个类名的字符串,而sql = "from"+T,这句话的语法不正确。
还有Class 是一个类,Class 类的实例表示正在运行的 Java 应用程序中的类和接口,而泛型T 也是一个类,但他本身不是Class对象
下面给出一个测试代码:
package ysw;
import javautil;
class Food{}
public class Test<T>
{
public void s(T t){
String s = ""+t;//泛型T 将调用对象的toString()方法,返回该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示 Systemoutprintln(s);
Class<T> cl = (Class<T>) tgetClass();//让泛型赋给Class对象,
Systemoutprintln(clgetName());//调用Class的getName()方法,返回类名。
}
public static void main(String args[]){
Test<Food> tf = new Test<Food>();
tfs(new Food());
}
}
////
output:
yswFood@1eb2c1b
yswFood
首先做一个接口,接口中声明需要的取值方法
然后做你要的实际的类,每个类实现不同的取值方法
然后list通过接口进行定义,将每个实际类的对象insert到list中间
然后利用多态实现动态的方法绑定,实现你的需求
Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,定义泛型 一般用 T 表示 public <T> List<T> method(T t){ 方法体} 。它的参数 就是 T 一个类型,你传什么类型的对象,T就是什么类型。
T将是 可变的类型。
以上就是关于java泛型方法的问题全部的内容,包括:java泛型方法的问题、如何获得java 泛型类中t的实例、java泛型T和class.getName一样吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)