В Python вы можете сделать:
from a import b as c
Как бы вы сделали это на Java, так как у меня два импорта, которые конфликтуют.
В Python вы можете сделать:
from a import b as c
Как бы вы сделали это на Java, так как у меня два импорта, которые конфликтуют.
Ответы:
В Java нет механизма псевдонимов импорта. Вы не можете импортировать два класса с одним и тем же именем и использовать оба из них без оговорок.
Импортируйте один класс и используйте полное имя для другого, т.е.
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
import [fully-qualified-name] as [ident]
. « Как» ключевое слово , кажется, не вписывается в Java , а также, альтернатива примерно то , что # использует C: import [ident] = [fully-qualified-name]
.
Как уже говорилось в других ответах, Java не предоставляет эту функцию.
Реализация этой функции запрашивалась несколько раз, например, как JDK-4194542: псевдоним имени класса или JDK-4214789: расширение импорта, чтобы разрешить переименование импортируемого типа .
Из комментариев:
Это не необоснованный запрос, хотя вряд ли существенный. Случайное использование полностью определенных имен не является излишним бременем (если библиотека действительно не использует одни и те же простые имена справа и слева, что является плохим стилем).
В любом случае, это не проходит планку цена / производительность для изменения языка.
Поэтому я думаю, что мы не увидим эту функцию в Java в ближайшее время :-P
Вероятно, стоит отметить, что в Groovy есть эта функция :
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
import com.example.{Calendar => MyCalendar}
import com.example.Calendar as MyCalendar
.
class MyCalendar extends com.example.Calendar {}
? Это не идеальный или красивый, но он должен служить большинству целей, кроме, скажем, рефлексии. Вы можете даже добавить комментарий с комментариями, если это необходимо /* import com.example.Calendar as MyCalendar */
.
Сегодня я подал проект JEP в OpenJDK об этой функции наложения имен. Я надеюсь, что они пересмотрят это.
Если вы заинтересованы, вы можете найти черновик JEP здесь: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
На самом деле можно создать ярлык, чтобы вы могли использовать более короткие имена в своем коде, выполнив что-то вроде этого:
package com.mycompany.installer;
public abstract class ConfigurationReader {
private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
public abstract String getLoaderVirtualClassPath();
public static QueryServiceConfigurationReader getInstance() {
return new Implementation();
}
}
Таким образом, вам нужно указать длинное имя только один раз, и вы можете иметь столько специально названных классов, сколько захотите.
Еще одна вещь, которая мне нравится в этом шаблоне, это то, что вы можете назвать реализующий класс так же, как абстрактный базовый класс, и просто поместить его в другое пространство имен. Это не связано с шаблоном импорта / переименования.