Изменить имя импорта на Java или импортировать два класса с тем же именем

В Python вы можете сделать:

from a import b as c

Как вы это сделаете в Java, поскольку у меня есть два импорта, которые сталкиваются.

Ответ 1

В Java нет механизма слияния импорта. Вы не можете импортировать два класса с одинаковым именем и использовать оба из них неквалифицированными.

Импортируйте один класс и используйте полное имя для другого, т.е.

import com.text.Formatter;

private Formatter textFormatter;
private com.json.Formatter jsonFormatter;

Ответ 2

Возможно, стоит отметить, что Groovy имеет эту функцию:

import java.util.Calendar
import com.example.Calendar as MyCalendar

MyCalendar myCalendar = new MyCalendar()

Ответ 3

Как уже было сказано в других ответах, Java не предоставляет эту функцию.

Выполнение этой функции было запрошено несколько раз, например. как JDK-4194542: сглаживание имени класса или JDK-4214789: Расширьте импорт, чтобы разрешить переименование импортируемого типа.

Из комментариев:

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

В любом случае, он не пропускает полосу цены/производительности для языка изменение.

Итак, я думаю, мы не увидим эту функцию в Java в ближайшее время: -P

Ответ 4

Java не позволяет вам это делать. Вам нужно будет обратиться к одному из классов по его полному имени и только импортировать другой.

Ответ 5

Сегодня я подал проект JEP в OpenJDK об этой функции наложения имен. Я надеюсь, что они пересмотрят это.

Если вы заинтересованы, вы можете найти проект JEP здесь: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7

Ответ 6

Это делает то, что вам нужно?

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();
    }
}

Ответ 7

На самом деле можно создать ярлык, чтобы вы могли использовать более короткие имена в своем коде, выполнив что-то вроде этого:

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();
    }
}

Таким образом вам нужно только указать длинное имя один раз, и вы можете иметь столько специально названных классов, которые хотите.

Еще одна вещь, которая мне нравится в этом шаблоне, заключается в том, что вы можете назвать класс реализации таким же, как абстрактный базовый класс, и просто поместить его в другое пространство имен. Это не связано с шаблоном импорта/переименования.