java泛型方法的问题

java泛型方法的问题,第1张

你这是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一样吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9628954.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存