Java编译器如何允许此类定义

时间:2013-07-16 11:26:07

标签: java java-ee java-ee-6

我正在深入研究Java EE世界。即使在Java EE发布新规范之后,应用服务器显示器也宣布了新版本。我知道Application Server Lib中存在所有规范实现,并且编译的war文件不需要另外的jar。除此之外,在开发JAVA EE时,我们需要说依赖性的Web项目

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
    </dependency>

当看到javaee-api-6.0.jar时,你可以意识到它只有957KB,换句话说它由类方法定义组成。

事实上,我已经在javaee-api-6.0.jar中反编译了一个类文件,这里是一个:我期望所有类文件都应该是接口和抽象。但事实并非如此。我想要理解的是编译器如何允许这样的Java类具有如下的方法定义:

public ActivationDataFlavor(Class paramClass, String paramString1, String paramString2);

已解压缩的类文件:

package javax.activation;

import java.awt.datatransfer.DataFlavor;

public class ActivationDataFlavor extends DataFlavor
{
  private String mimeType;
  private MimeType mimeObject;
  private String humanPresentableName;
  private Class representationClass;

  public ActivationDataFlavor(Class paramClass, String paramString1, String paramString2);

  public ActivationDataFlavor(Class paramClass, String paramString);

  public ActivationDataFlavor(String paramString1, String paramString2);

  public String getMimeType();

我的Java编译器给出了您所期望的所有错误。 enter image description here

我不认为java编译器不能正常工作,因为所有类文件只有1KB。 enter image description here

1 个答案:

答案 0 :(得分:4)

这个jar只存在以适应编译依赖性,预计不会在jvm中运行。因此,所有字节码都被剥离,在这种情况下,反编译器无法正常工作。

https://java.net/jira/browse/GLASSFISH-11389