Существует ли эквивалентный Java или методология для ключевого слова определения типа в C++?

Причина, почему у Вас не может быть статического метода в интерфейсе, заключается в том, как статические ссылки твердости Java. Java не потрудится искать экземпляр класса при попытке выполнить статический метод. Это вызвано тем, что статические методы не являются зависимым экземпляра и следовательно могут быть выполнены прямо из файла класса. Учитывая, что все методы в интерфейсе абстрактны, VM должен был бы искать конкретную реализацию интерфейса для нахождения кода позади статического метода так, чтобы это могло быть выполнено. Это тогда противоречит, как разрешение статического метода работает и ввело бы несоответствие в язык.

237
задан Matt Ball 8 November 2012 в 15:40
поделиться

6 ответов

В Java есть примитивные типы, объекты и массивы и все. Нет typedefs.

112
ответ дан 23 November 2019 в 03:24
поделиться

Если это то, что вы имеете в виду, вы можете просто расширить класс, который вы хотите для typedef, например:

public class MyMap extends HashMap<String, String> {}
97
ответ дан 23 November 2019 в 03:24
поделиться

В java с версии 1.6 нет typedef, вы можете создать класс-оболочку для того, что вам нужно, поскольку вы не можете создавать подклассы конечных классов (Integer, Double и т. Д.)

14
ответ дан 23 November 2019 в 03:24
поделиться

Вы можете использовать Enum, хотя семантически он немного отличается от typedef, поскольку допускает только ограниченный набор значений. Другое возможное решение - именованный класс-оболочка, например

public class Apple {
      public Apple(Integer i){this.i=i; }
}

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

-6
ответ дан 23 November 2019 в 03:24
поделиться

Typedef позволяет неявно присваивать элементам типы, которыми они не являются. Некоторые люди пытаются обойти это с помощью расширений; прочтите здесь, в IBM, чтобы объяснить, почему это плохая идея.

Edit: Хотя строгий вывод типов полезен, я не думаю (и надеюсь, что мы не увидим) typedef Уродливая голова в управляемых языках (когда-либо?).

Редактировать 2: В C # вы можете использовать оператор using, подобный этому, в верхней части исходного файла. Он используется, поэтому вам не нужно выполнять второй показанный пункт. Единственный раз, когда вы видите изменение имени, - это когда в области видимости возникает конфликт имен между двумя типами. Переименование ограничено одним файлом, за пределами которого каждый тип переменной / параметра, который его использовал, известен своим полным именем.

using Path = System.IO.Path;
using System.IO;
-7
ответ дан 23 November 2019 в 03:24
поделиться

В Java нет необходимости в typedef. Все является объектом, кроме примитивов. Указателей нет, только ссылки. Сценарии, в которых вы обычно используете typedef, - это экземпляры, в которых вы вместо этого создаете объекты.

-14
ответ дан 23 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

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