【发布时间】:2013-09-05 17:26:25
【问题描述】:
我知道当一个类有一个内部类时,这个类会被编译成两个类文件。今天我有如下代码
public class GenericDeserializer {
public static void main(String[] args) {
String cityPageLoadJson = "{\"count\":2,\"pageLoad\":[{\"id\":4,\"name\":\"HAN\"},{\"id\":8,\"name\":\"SGN\"}]}";
Type type = new TypeToken<GenericResult<City>>() {
}.getType();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
GenericResult<City> cityPageLoad = gson.fromJson(cityPageLoadJson, type);
for (City city : cityPageLoad.getPageLoad()) {
System.out.println(gson.toJson(city));
}
}
}
上面的虽然没有内部类,但是java编译器还是会创建两个class文件:
GenericDeserializer.class
GenericDeserializer$1.class
使用Java Decompiler工具,我看到了第二个的内容
package net.tuandn.training.lesson.gson;
import com.google.gson.reflect.TypeToken;
import net.tuandn.training.model.City;
import net.tuandn.training.model.GenericResult;
final class GenericDeserializer$1 extends TypeToken<GenericResult<City>>
{
}
谁能解释一下为什么要创建这个类?
编译时何时创建多个类文件?
非常感谢!
【问题讨论】:
-
感谢所有回答!那么第二个问题呢?请让我知道所有情况!
-
在我的回答中更新。
-
@RohitJain 对不起,我想知道还有一件事,如果类没有内部类,包括内部匿名类,是否可以在编译时生成多个生成的类文件?你了解我吗?对不起我的英语!!!
-
不,那是不可能的。单个类只会产生一个类文件。
-
@RohitJain 这就是我需要的答案。谢谢你非常详细的回答!
标签: java compiler-construction