在Java中,object.class做了什么?

时间:2012-03-23 23:05:39

标签: java generics

我正在使用Google GSON,并且在他们关注的文档中mention

Object Examples

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}
     

(序列化)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);  
==> json is {"value1":1,"value2":"abc"}
     

请注意,您无法使用循环引用序列化对象,因为这会导致无限递归。

     

(反序列化)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);   
==> obj2 is just like obj

在最底层,他们使用BagOfPrimitives.class。这到底是做什么的? (我想它可能会返回类,但在这种情况下,我希望代码只是省略'.class')。

2 个答案:

答案 0 :(得分:4)

它是类文字 - 它提供对表示特定类的Class对象的引用。有关详细信息,请参阅section 15.8.2 of the JLS。例如:

String text = "Hello";
Class<?> classFromObject = text.getClass();
Class<?> classFromLiteral = String.class;
System.out.println(classFromObject == classFromLiteral); // true

在反序列化的情况下,告诉反序列化器使用什么类型来尝试反序列化数据。

答案 1 :(得分:0)

您在方法中放置了一个类型,因此您无需强制转换它。 fromJson方法是通用的,并根据您在那里写的类型解析类型本身...

<T> T fromJson(String json, Class<T> classOfT)