在Java中更改导入名称,或导入两个具有相同名称的类

在Python中,你可以做一个:

from a import b as c 

你怎么用Java来做到这一点,因为我有两个冲突的import。

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不提供此function。

多次请求实现此function,例如JDK-4194542:类别别名或JDK-4214789:扩展导入以允许重命名导入的types 。

来自评论:

这不是一个无理的要求,虽然不是必要的。 偶尔使用完全合格的名字并不是一个不适当的负担(除非图书馆真正重复使用相同的简单名称,这是不好的风格)。

无论如何,它没有通过语言变化的性价比。

所以我想我们不会很快看到Java中的这个特性:-P

Java不允许你这样做。 您将需要引用其中一个类的完全限定名称,只导入另一个类。

这是否做你所需要的?

 public class Main { private static final class AB extends aB {} private static final class BB extends bB {} public static void main(String[] args) { AB ab = new AB(); BB bb = new BB(); } } 

实际上,可以创build一个快捷方式,以便在代码中使用较短的名称,例如:

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

这样你只需要指定一次长名称,并且你可以拥有任意数量的专门命名的类。

我喜欢这种模式的另一件事是,您可以将实现类命名为抽象基类,并将其放在不同的名称空间中。 这与input/重命名模式无关。