Java 获取真正的类类型

Java 获取真正的类类型,java,class,casting,Java,Class,Casting,如果我这样做: String s = "hello"; Class<?> c = s.getClass(); String s=“你好”; c类=s.getClass(); 然后,c实际上是一个类,但是里面有一个字符串。 那么,我如何找回字符串类型呢 因为如果我使用: c.getClass()我显然得到了一个Class类型。因此,Class c将引用String类型的类的对象Class c基本上有一些关于String类的元数据 String s = "hello";

如果我这样做:

String s = "hello";
Class<?> c = s.getClass();
String s=“你好”;
c类=s.getClass();
然后,
c
实际上是一个
,但是里面有一个
字符串
。 那么,我如何找回
字符串
类型呢

因为如果我使用:
c.getClass()
我显然得到了一个
Class
类型。

因此,
Class c
将引用String类型的类的对象
Class c
基本上有一些关于String类的
元数据

    String s = "hello";
    Class<?> c =  s.getClass();
    String s1 = (String) c.newInstance();
例如:

String s = "hello";
Class<?> c =  s.getClass();
System.out.println("Name : "+c.getName());
System.out.println("Simple Name: "+c.getSimpleName());
System.out.println("Canonical Name: "+c.getCanonicalName());
System.out.println("Type Name : "+c.getTypeName());
注意:由于您可以看到不同方法(如getCanonicalName、getCanonicalName等)得到的相同返回值,因此可能并不总是相同的,请参阅我在下面提供的链接

由此可见,类对象上有几种方法可用于获取有关
类的
元数据信息。请按照查看更多信息。

因此,
类c
将引用类型为String的类的对象
Class c
基本上有一些关于String类的
元数据

    String s = "hello";
    Class<?> c =  s.getClass();
    String s1 = (String) c.newInstance();
例如:

String s = "hello";
Class<?> c =  s.getClass();
System.out.println("Name : "+c.getName());
System.out.println("Simple Name: "+c.getSimpleName());
System.out.println("Canonical Name: "+c.getCanonicalName());
System.out.println("Type Name : "+c.getTypeName());
注意:由于您可以看到不同方法(如getCanonicalName、getCanonicalName等)得到的相同返回值,因此可能并不总是相同的,请参阅我在下面提供的链接


由此可见,类对象上有几种方法可用于获取有关
类的
元数据信息。请按照获取更多信息。

首先:您可以从对象获取类实例,因为类的实例与类相关联(而
对象中存在
getClass()
方法),但它不起作用,因为类与的特定实例不相关联

第二:要获取类型,您不必关心在
声明的类型中是否指定了无界通配符,因为泛型在运行时被擦除。
重要的是
对象本身知道与
对象关联的类(此处为
字符串
)的信息。
例如,您可以编写一个或第二个:

Class<? extends String> c = s.getClass();
Class<?> c = s.getClass();

首先:可以从对象获取类实例,因为类的实例与类相关联(而
对象
类中存在
getClass()
方法),但它不起作用,因为类与类的特定实例没有关联

第二:要获取类型,您不必关心在
声明的类型中是否指定了无界通配符,因为泛型在运行时被擦除。
重要的是
对象本身知道与
对象关联的类(此处为
字符串
)的信息。
例如,您可以编写一个或第二个:

Class<? extends String> c = s.getClass();
Class<?> c = s.getClass();

不,我需要什么类型的信息。实际上我不知道它是一个
字符串
.getName()
帮助而不是使用
.getClass()
谢谢!请注意,
Class.newInstance()
今天已被弃用
Constructor.newInstance()是推荐的方法。不,我需要知道后面是什么类型的信息。实际上我不知道它是一个
字符串
.getName()
帮助而不是使用
.getClass()
谢谢!请注意,
Class.newInstance()
今天已被弃用<代码>构造函数。建议使用newInstance()