В 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;
Возможно, стоит отметить, что Groovy имеет эту функцию:
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
Как уже было сказано в других ответах, Java не предоставляет эту функцию.
Выполнение этой функции было запрошено несколько раз, например. как JDK-4194542: сглаживание имени класса или JDK-4214789: Расширьте импорт, чтобы разрешить переименование импортируемого типа.
Из комментариев:
Это не необоснованный запрос, хотя и крайне существенный. Случайные использование полностью квалифицированных имен не является чрезмерным бременем (если только библиотека действительно повторяет те же простые имена справа и слева, что плохой стиль).
В любом случае, он не пропускает полосу цены/производительности для языка изменение.
Итак, я думаю, мы не увидим эту функцию в Java в ближайшее время: -P
Java не позволяет вам это делать. Вам нужно будет обратиться к одному из классов по его полному имени и только импортировать другой.
Сегодня я подал проект JEP в OpenJDK об этой функции наложения имен. Я надеюсь, что они пересмотрят это.
Если вы заинтересованы, вы можете найти проект JEP здесь: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
Это делает то, что вам нужно?
public class Main {
private static final class AB extends a.B {}
private static final class BB extends b.B {}
public static void main(String[] args) {
AB ab = new AB();
BB bb = new BB();
}
}
На самом деле можно создать ярлык, чтобы вы могли использовать более короткие имена в своем коде, выполнив что-то вроде этого:
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();
}
}
Таким образом вам нужно только указать длинное имя один раз, и вы можете иметь столько специально названных классов, которые хотите.
Еще одна вещь, которая мне нравится в этом шаблоне, заключается в том, что вы можете назвать класс реализации таким же, как абстрактный базовый класс, и просто поместить его в другое пространство имен. Это не связано с шаблоном импорта/переименования.