2

我正在深入研究 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 编译器给出了你所期望的错误。 在此处输入图像描述

我不认为 java 编译器不能正常工作,因为所有的类文件只有 1KB。 在此处输入图像描述

4

1 回答 1

4

此 jar 仅存在于适合编译依赖项,预计不会在 jvm 中运行。所以所有的字节码都被剥离了,反编译器在这种情况下不能正常工作。

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

于 2013-07-16T11:33:41.860 回答