В Python вы можете сделать:изменить имя импорта в Java или импортировать два класса с тем же именем
from a import b as c
Как бы вы сделать это в Java, так как у меня есть два импорта, которые сталкивающиеся.
В Python вы можете сделать:изменить имя импорта в Java или импортировать два класса с тем же именем
from a import b as c
Как бы вы сделать это в Java, так как у меня есть два импорта, которые сталкивающиеся.
В Java нет механизма слияния импорта. Вы не можете импортировать два класса с одинаковым именем и использовать оба из них неквалифицированными.
Импорт один класс и использовать полное имя для другого, т.е.
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
Это правильный ответ, и я добавлю только то, что вы подразумевали: нет, в Java нет такого синтаксиса псевдонимов. –
Это еще ограничение в Java 8? – HairOfTheDog
@HairOfTheDog Nope, к сожалению, в Java8 не добавлено сглаживание импорта. – AdrieanKhisbe
Java не позволяет сделать это. Вам нужно будет обратиться к одному из классов по его полному имени и только импортировать другое.
Это, вероятно, стоит отметить, что Groovy has this feature:
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
Как и другие ответы уже говорилось, Java не предоставляет эту функцию.
Выполнение этой функции было запрошено несколько раз, например. как JDK-4194542: class name aliasing или JDK-4214789: Extend import to allow renaming of imported type.
Из комментариев:
Это не необоснованным запрос, хотя вряд ли необходимо. Случайные использование полностью квалифицированных имен не является чрезмерным бременем (если только библиотека действительно повторяет те же простые имена справа и слева, что является плохим стилем).
В любом случае, это не соответствует значению цены/производительности для языка изменить.
Так что я думаю, что мы не увидим эту функцию в Java в ближайшее время :-P
wow! вы не шутили о «не (...) в ближайшее время», я вижу, что запрос функции был отклонен как бессмысленный сахар еще в 1998 году! И каждая попытка вновь открыть дискуссию в течение последних 18 лет застряла на ссылке на это древнее решение. Думаю, было бы проще убедить разработчиков IDE реализовать это как маску в редакторе, чем попытаться опрокинуть смысл в Oracle. – Superole
Старые рассуждения верны, хотя на практике эти столкновения очень редко бывают. – slim
Я не согласен, что эти столкновения редко происходят. Ориентация объекта способствует простому именованию. У меня может быть класс Employee из двух разных библиотек, которые отделяют вещи от сотрудника (например). –
На самом деле можно создать ярлык, так что вы можете использовать более короткие имена в вашем коде, делая что-то вроде этого:
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();
}
}
Таким образом, вам нужно только указать длинное имя один раз, и вы можете иметь столько специально названных классов, которые вы хотите.
Другое, что мне нравится в этом шаблоне, это то, что вы можете назвать класс реализации так же, как абстрактный базовый класс, и просто поместить его в другое пространство имен. Тем не менее это не связано с шаблоном импорта/переименования.
Это очень плохое решение. Он полностью не справляется со статикой, может потребовать постоянных обновлений и не помогает с проблемами де-сериализации (такими как десериализация из xml через jaxb). –
Это делает то, что вам нужно?
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();
}
}
Это может сработать, но это вызовет проблемы, если вы попытаетесь сделать что-либо рефлексивное или попытаетесь создать общедоступный метод, который возвращает один из этих типов. Точки для умения, но умение не всегда является хорошей идеей на практике. –
Желаю java сделать это. Приводит к классам с неудобными именами. – fncomp
@fncomp: .. и грязный код с большим количеством полных классов: P – Superole