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

java.lang.reflect.Field中的toGenericString和toString有什么区别,java,tostring,Java,Tostring,输出如下:- intcom.sample.Demo.i intcom.sample.Demo.i 有人能告诉我这些方法之间有什么区别吗?好的,来自javadoc: toGenericString 返回描述此字段的字符串,包括其泛型类型 托斯特林 返回描述此字段的字符串 因此,如果您的字段没有泛型类型,则没有区别 有关泛型的mor信息,请查看此处:此处的真实答案:如有疑问,请阅读: 返回描述此字段的字符串,包括其泛型类型。格式是字段的访问修饰符(如果有),后跟泛型字段类型,后跟空格,后跟声明字段的

输出如下:-

intcom.sample.Demo.i

intcom.sample.Demo.i

有人能告诉我这些方法之间有什么区别吗?

好的,来自javadoc:

toGenericString 返回描述此字段的字符串,包括其泛型类型

托斯特林 返回描述此字段的字符串

因此,如果您的字段没有泛型类型,则没有区别


有关泛型的mor信息,请查看此处:

此处的真实答案:如有疑问,请阅读:

返回描述此字段的字符串,包括其泛型类型。格式是字段的访问修饰符(如果有),后跟泛型字段类型,后跟空格,后跟声明字段的类的完全限定名,后跟句点,后跟字段名称

修饰符按照Java语言规范指定的规范顺序放置。首先是public、protected或private,然后是按以下顺序排列的其他修饰符:static、final、transient、volatile

鉴于,对于toString而言,它表示:

返回描述此字段的字符串。格式是字段的访问修饰符(如果有),后跟字段类型,后跟空格,后跟声明字段的类的完全限定名,后跟句点,后跟字段名称


正如name和javadoc透露的:这与泛型有关。因此,您可能希望将测试代码更改为,很好地使用泛型。

尝试声明一个类似列表的泛型字段,并比较其差异。它只是概括了类型擦除是一个boo-boo的事实。它在@Andy Turner有效,谢谢。我从没想过。
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());
        }
    }
}