У Python ви можете:
from a import b as c
Як би ви це зробили на Яві, оскільки я маю два імпорти, які стикаються.
У Python ви можете:
from a import b as c
Як би ви це зробили на Яві, оскільки я маю два імпорти, які стикаються.
Відповіді:
У 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();
}
}
Таким чином вам потрібно лише один раз вказати довге ім’я, і ви можете мати стільки спеціально названих класів, які вам потрібно.
Ще одна річ, яка мені подобається в цьому шаблоні - це те, що ви можете назвати клас реалізації таким же, як абстрактний базовий клас, і просто розмістити його в іншому просторі імен. Це, однак, не має відношення до моделі імпорту / перейменування.