package com.sample;
import java.lang.reflect.Field;
class Demo
{
int i;
}
public class DifferenceGenericStringAndToString
{
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
Class c = Demo.class;
Field[] fields = c.getDeclaredFields();
for(Field field : fields)
{
System.out.println(field.toGenericString());
System.out.println(field.toString());
}
}
}
输出如下: -
int com.sample.Demo.i
int com.sample.Demo.i
有人能告诉我这些方法有什么不同吗?
答案 0 :(得分:3)
真正的答案是:如果有疑问,请阅读javadoc:
返回描述此Field的字符串,包括其泛型类型。格式是字段的访问修饰符(如果有),后跟通用字段类型,后跟空格,后跟声明字段的类的完全限定名称,后跟句点,后跟名称字段。
修饰符按照规范顺序放置,如#34; Java语言规范"所指定。这首先是public,protected或private,然后是以下顺序的其他修饰符:static,final,transient,volatile。
然而,toString()
说:
返回描述此Field的字符串。格式是字段的访问修饰符(如果有),后跟字段类型,后跟空格,后跟声明字段的类的完全限定名称,后跟句点,后跟字段名称
正如名称和 javadoc 一样:这与 generics 有关。因此,您可能希望将测试代码更改为使用泛型。
答案 1 :(得分:1)
好吧,来自javadoc:
toGenericString() 返回描述此Field的字符串,包括其泛型类型。
的toString() 返回描述此Field的字符串。
因此,如果您的Field没有泛型类型,则没有区别。
有关泛型的详细信息,请查看此处:https://docs.oracle.com/javase/tutorial/java/generics/