java泛型T和class.getName一样吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java泛型T和class.getName一样吗?相关的知识,希望对你有一定的参考价值。

public abstract class BaseDaoImpl<T> implements BaseDao<T>

Class<T> clazz;
public BaseDaoImpl()
//获取当前new对象的直接父类泛型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
clazz = (Class<T>)pt.getActualTypeArguments()[0];

………………省略中间
拼接
String sql = "from"+clazz.getName()

sql = "from"+T
一样吗?

不一样,第一个class.getName();是Class对象的一个方法,它会返回一个类名的字符串,而sql = "from"+T,这句话的语法不正确。
还有Class 是一个类,Class 类的实例表示正在运行的 Java 应用程序中的类和接口,而泛型T 也是一个类,但他本身不是Class对象
下面给出一个测试代码:

package ysw;
import java.util.*;
class Food
public class Test<T>

public void s(T t)
String s = ""+t;//泛型T 将调用对象的toString()方法,返回该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示 System.out.println(s);
Class<T> cl = (Class<T>) t.getClass();//让泛型赋给Class对象,
System.out.println(cl.getName());//调用Class的getName()方法,返回类名。

public static void main(String args[])
Test<Food> tf = new Test<Food>();
tf.s(new Food());


////
output:

ysw.Food@1eb2c1b
ysw.Food
参考技术A sql = "from"+T

能这样用?

javapoet添加泛型参数问题,怎么解决

参考技术A Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,定义泛型 一般用 T 表示. public <T> List<T> method(T t) 方法体 。它的参数 就是 T 一个类型,你传什么类型的对象,T就是什么类型。
T将是 可变的类型。

以上是关于java泛型T和class.getName一样吗?的主要内容,如果未能解决你的问题,请参考以下文章

java泛型转换

你真的了解JAVA中的泛型E、T、K、V吗?

javapoet添加泛型参数问题,怎么解决

Java 泛型啥时候需要 <?扩展 T> 而不是 <T> 并且切换有啥缺点吗?

jdk 1.8 的泛型和之前的不一样吗

Java初谈之泛型