Почему классы компилируют в .class, но интерфейс не делает к .interface

Есть ли какая-либо определенная причина, почему интерфейсы не компилируются в MyInterface.java, скомпилированный в .interface файл? Но любой класс компилируется в .class файл.!

10
задан Ravisha 10 February 2010 в 11:54
поделиться

6 ответов

Java относится к интерфейсам почти как к классам, например, они разделяют одно и то же пространство имен (вы не можете иметь интерфейс с тем же именем, что и класс), а скомпилированный интерфейс почти идентичен скомпилированному абстрактному классу.

Поэтому нет никакого смысла хранить их в другом формате или с другим расширением файла. Наоборот, это усложнило бы многие вещи. Например, когда вы загружаете класс или интерфейс по имени (Class.forName("my.class.name")) Java не знает, класс это или интерфейс. Если бы существовало два разных расширения, Java должна была бы попытаться найти файл "my/class/name.class", а затем "my/class/name.interface", вместо того, чтобы пытаться найти только первый.

6
ответ дан 3 December 2019 в 14:24
поделиться

Это должен быть просто комментарий, но можете ли вы опубликовать ответ XML код?

EDIT: Просто чтобы немного сузиться, я сделал простой тест и работал действительно хорошо:

<div id="foo">
    <error> 
        <code>AccessDenied</code>
        <message>Invalid according to Policy: Policy expired.</message> 
        <hostid> SZuQn5hTyf32j79AWUym1/si48oqjPifrx4goDVDLYYxc6cJVbbHroLJYcAM89+T</hostid> 
    </error> 
</div>

Затем я сделал какой-то код jQuery на моем firebug:

$("#foo").find("message").text()

Может быть, вы можете дать аларм ($ («# foo») .html ()) и проверить

-121--5044472-

Что вы хотите, так это что-то, что поддерживает конвейерирование HTTP . Если вы еще не знакомы, вам следует ознакомиться с этой страницей.

Да, выберите libmicrohttp . Имеет поддержку SSL и т. д. и работает как в Unix, так и в Windows.

Однако Кристофер прямо на месте в своем комментарии. Если у вас есть время запуска для каждого ответа, вы не собираетесь много выиграть за счет конвейерной обработки. Однако если у вас есть только значительное время ответа на первый запрос, вы можете что-то выиграть.

С другой стороны, если каждый ответ имеет время запуска, вы можете получить много, не используя конвейерную обработку, а создать новый запрос для каждого объекта. Тогда у каждого запроса может быть свой поток, отсасывающий затраты на запуск параллельно. Все ответы будут отправлены «сразу» в оптимальном случае. libmicrohttp поддерживает этот режим работы в модели потока MHD _ USE _ THREAD _ PER _ CONNECTION .

-121--4690701-

На Java имеются исходные файлы с именем .java и двоичные файлы с именем .class. Это просто выбор именования.

Кроме того, для классов java и интерфейсов не так сильно отличаются (класс просто содержит много дополнительной информации, такой как тела методов).

3
ответ дан 3 December 2019 в 14:24
поделиться

Так решили дизайнеры языка.

Это имеет смысл несколькими способами:

  • .class файлы являются побочным продуктом, который обычно не виден и не манипулируется вручную.
  • Чем меньше различных расширений программа использует, тем проще ее сопровождать.
  • Во многих случаях в коде нет различия между классом и интерфейсом, поэтому логично, что двоичные файлы выглядят одинаково.

Честно говоря, я не могу придумать хорошую причину для того, чтобы иметь различные расширения для скомпилированных классов и интерфейсов. Почему важно различать между ними?

4
ответ дан 3 December 2019 в 14:24
поделиться

Это просто их выбор. Я бы не стал об этом беспокоиться. В любом случае это двоичный файл. Можно подумать: «Даже если это интерфейс, он все еще находится в файле .java».

1
ответ дан 3 December 2019 в 14:24
поделиться

Потому что цель состоит в том, чтобы указать, что файл представляет собой байт-код Java (и .class было выбранным для этого расширением), а не конкретную языковую конструкцию.

14
ответ дан 3 December 2019 в 14:24
поделиться

физическое представление байтового кода в файловой системе не имеет значения.

Важна логическая реализация (класс или интерфейс).

6
ответ дан 3 December 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: