首页 文章

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

提问于
浏览
267

在Python中你可以做一个:

from a import b as c

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

5 回答

  • 41

    Java中没有导入别名机制 . 您不能导入两个具有相同名称的类,并且使用两个不合格的类 .

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

    import com.text.Formatter;
    
    private Formatter textFormatter;
    private com.json.Formatter jsonFormatter;
    
  • 16

    值得注意的是Groovy has this feature

    import java.util.Calendar
    import com.example.Calendar as MyCalendar
    
    MyCalendar myCalendar = new MyCalendar()
    
  • 43

    正如其他答案已经说明的那样,Java不提供此功能 .

    已经多次请求实现该功能,例如,如JDK-4194542: class name aliasingJDK-4214789: Extend import to allow renaming of imported type .

    来自评论:

    这不是一个不合理的要求,尽管不是必需的 . 偶尔使用完全限定名称并不是一个不适当的负担(除非库真的重复使用左右相同的简单名称,这是不好的风格) . 无论如何,它不会通过语言变化的价格/性能标准 .

    所以我想我们很快就不会在Java中看到这个功能:-P

  • -3

    Java不允许你这样做 . 您需要通过其完全限定名称引用其中一个类,并仅导入另一个类 .

  • 357

    实际上可以创建一个快捷方式,这样你可以通过这样的方式在代码中使用较短的名称:

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

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

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

相关问题