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

更改Java中导入的名称,或导入两个同名的类,java,import,Java,Import,在Python中,您可以执行以下操作: from a import b as c 在Java中如何实现这一点,因为我有两个相互冲突的导入。Java中没有导入别名机制。不能导入同名的两个类并同时使用它们 导入一个类并使用另一个类的完全限定名,即 import com.text.Formatter; private Formatter textFormatter; private com.json.Formatter jsonFormatter; Java中没有导入别名机制。不能导入同名的两个

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

from a import b as c

在Java中如何实现这一点,因为我有两个相互冲突的导入。

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

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

import com.text.Formatter;

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

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

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

import com.text.Formatter;

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

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

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

可能值得注意的是:


可能值得注意的是:


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

已多次请求实施此功能,例如作为或

从评论中:

这不是一个不合理的要求,尽管几乎没有必要。偶尔 使用完全限定的名称不是一个不适当的负担(除非图书馆 真正重用相同的简单名称(右和左),这是一种糟糕的风格)

在任何情况下,它都无法通过语言的性价比标准 改变


因此,我想我们不会很快在Java中看到这个特性:-p

正如其他答案所述,Java不提供这个特性

已多次请求实施此功能,例如作为或

从评论中:

这不是一个不合理的要求,尽管几乎没有必要。偶尔 使用完全限定的名称不是一个不适当的负担(除非图书馆 真正重用相同的简单名称(右和左),这是一种糟糕的风格)

在任何情况下,它都无法通过语言的性价比标准 改变


因此,我想我们不会很快在Java中看到此功能:-p

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

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();
    }
}
这样,只需指定一次长名称,就可以拥有任意多个特殊命名的类


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

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

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();
    }
}
这样,只需指定一次长名称,就可以拥有任意多个特殊命名的类


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

今天我向OpenJDK提交了一份关于此别名功能的JEP草案。我希望他们会重新考虑


如果您感兴趣,可以在这里找到JEP草稿:

今天我向OpenJDK提交了一份关于此别名功能的JEP草稿。我希望他们会重新考虑


如果您感兴趣,可以在这里找到JEP草案:

很可笑,java还没有这个。斯卡拉有

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

val Formatter textFormatter;
val JsonFormatter jsonFormatter;

很可笑,java还没有这个。斯卡拉有

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

val Formatter textFormatter;
val JsonFormatter jsonFormatter;


这是正确的答案,对此我只想补充一下你的暗示:不,Java中没有这种别名语法。这在Java 8中仍然是一个限制吗?@Hairofdog Nope,不幸的是,Java8中没有添加导入别名是的,我同意你的评论linuxdan。。。Java在语法更新方面已经走上了恐龙的道路。@Bozho就像python那样:
将[完全限定名]导入为[ident]
。“as”关键字似乎也不适合Java,另一种选择是C#使用的:
import[ident]=[fully-qualified name]
。这是正确的答案,我只想补充一下您的暗示:不,Java中没有这种别名语法。这在Java 8中仍然是一个限制吗?@hairofdog Nope,不幸的是,Java8Yeah中没有添加导入别名,我同意你的评论linuxdan。。。Java在语法更新方面已经走上了恐龙的道路。@Bozho就像python那样:
将[完全限定名]导入为[ident]
。“as”关键字似乎也不适合Java,另一种方法是C#使用的:
import[ident]=[fully-qualified name]
。我希望Java能做到这一点。导致类具有笨拙的名称。@fncomp:…和带有大量完全限定类名的凌乱代码:PJava12仍然没有这样的名称。我希望java能做到这一点。导致类具有笨拙的名称。@fncomp:…以及包含大量完全限定类名的凌乱代码:PJava 12仍然没有这一功能。这是一个非常糟糕的解决方案。它完全无法处理静态,可能需要不断更新,并且无助于反序列化问题(例如通过jaxb从xml反序列化),这是一个非常糟糕的解决方案。它完全无法处理静态,可能需要不断更新,并且无助于反序列化问题(例如通过jaxb从xml反序列化)。在Scala中,它是:
import com.example.{Calendar=>MyCalendar}
在Kotlin中:
将com.example.Calendar导入为MyCalendar
。在PHP中,它是:使用com\example\Calendar作为MyCalendar。看到(至少)3种基于JVM的语言(Groovy、Scala和Kotlin)具有此功能非常恼人,但Java本身仍然没有……像
类MyCalendar扩展com.example.Calendar这样的东西呢{}
?它既不理想也不漂亮,但它应该满足大多数目的,比如说,不需要反射。你甚至可以