Измените имя импорта в Java или импортируйте два класса с одинаковым именем

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

from a import b as c

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

5 ответов


в 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 не позволяет вам это делать. Вам нужно будет ссылаться на один из классов по его полному имени и импортировать только другой.


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

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

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

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