匿名子类在java中意味着什么?

时间:2016-04-22 16:57:39

标签: java json

最近,我正在使用谷歌的Gson学习JSON。我遇到了一个问题。这是代码:

Type type = new TypeToken<Collection<Data>>(){}.getType();

我无法理解{}的真正含义。所以我阅读了源代码,并得到类描述:构造一个新类型的文字。从类型参数派生表示类...客户端创建一个空anonymous subclassanonymous subclass让我感到困惑?任何人都可以具体解释一下吗?

1 个答案:

答案 0 :(得分:2)

{}是匿名类的主体。

您拥有的完整定义是:

class MyTypeToken extends TypeToken<Collection<Data>> {

}

TypeToken<Collection<Data>> tcd = new MyTypeToken();
Type type = tcd.getType();

Java不是必须输入所有内容,而是允许您将其简化为:

Type type =
    new TypeToken<Collection<Data>>() // this is the constructor
    {
        // in here you can override methods and add your own if you want
    }   // this ends the declaration of the class. At this point the class is created and initialized
    .getType(); // This is method of the class and semicolon to end the expression

请注意,由于该类是匿名的,因此您必须在创建它的同时对其进行初始化。如果你试图在之后对其进行初始化,那就会失去它的匿名性

你也可以这样做:

TypeToken<Collection<Data>> tt = new TypeToken<Collection<Data>>(){};
Type type = tt.getType();