java.lang.reflect.Field中toGenericString和toString有什么区别

时间:2017-01-20 14:08:04

标签: java

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

有人能告诉我这些方法有什么不同吗?

2 个答案:

答案 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/