在Python中,您可以执行以下操作:

from a import b as c

在Java中如何做到这一点,因为我有两个冲突的导入。


当前回答

可能值得注意的是,Groovy有这样的特性:

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

MyCalendar myCalendar = new MyCalendar()

其他回答

Java中没有导入别名机制。不能导入两个同名的类,并且都使用非限定类。

导入一个类,并对另一个类使用完全限定名,即。

import com.text.Formatter;

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

Java不允许这样做。您需要通过其中一个类的全限定名引用它,而只导入另一个类。

今天我向OpenJDK提交了关于这个别名特性的JEP草案。我希望他们能重新考虑。

如果您感兴趣,可以在这里找到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();
    }
}

通过这种方式,您只需要指定一次长名称,并且可以拥有任意多个特殊命名的类。

我喜欢这种模式的另一个原因是,可以将实现类命名为与抽象基类相同的类,只是将其放置在不同的名称空间中。不过,这与导入/重命名模式无关。

可笑的是java还没有这个功能。Scala有它

import com.text.Formatter
import com.json.{Formatter => JsonFormatter}

val Formatter textFormatter;
val JsonFormatter jsonFormatter;