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

那年仲夏 提交于 2020-03-07 16:59:56

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

from a import b as c

您将如何在Java中执行此操作,因为我有两个冲突的导入。


#1楼

Java中没有导入别名机制。 您不能导入两个具有相同名称的类,并且不能同时使用它们。

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

import com.text.Formatter;

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

#2楼

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


#3楼

值得注意的是Groovy具有此功能

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

MyCalendar myCalendar = new MyCalendar()

#4楼

正如其他答案所述,Java不提供此功能。

已多次要求实现此功能,例如,作为JDK-4194542:类名别名JDK-4214789:扩展导入以允许重命名导入的类型

从评论:

这不是一个不合理的请求,尽管不是很必要。 偶尔使用全限定名称并不是一个不适当的负担(除非库确实左右重复使用相同的简单名称,这是不好的样式)。

无论如何,它不会超过语言更改的性价比。

所以我想我们很快将不会在Java中看到此功能:-P


#5楼

实际上,可以创建一个快捷方式,以便通过执行以下操作在代码中使用较短的名称:

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

这样,您只需指定一次长名称,就可以拥有多个想要的特殊命名的类。

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!