在Python中你可以做:
from a import b as c
你如何用Java做到这一点,因为我有两个冲突的导入。
答案 0 :(得分:391)
Java中没有导入别名机制。您不能导入两个具有相同名称的类,并且使用两个不合格的类。
导入一个类并使用另一个类的完全限定名称,即
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
答案 1 :(得分:51)
值得注意的是Groovy has this feature:
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
答案 2 :(得分:46)
正如其他答案已经说明的那样,Java没有提供此功能。
多次要求实施此功能,例如为JDK-4194542: class name aliasing或JDK-4214789: Extend import to allow renaming of imported type。
来自评论:
这不是一个不合理的要求,尽管不是必需的。偶尔 使用完全限定名称不是一种不应有的负担(除非图书馆 真正重用左右相同的简单名称,这是不好的风格)。
无论如何,它并没有超越语言的价格/性能标准 变化
所以我想我们很快就不会在Java中看到这个功能:-P
答案 3 :(得分:18)
Java不允许你这样做。您需要通过其完全限定名称引用其中一个类,并仅导入另一个类。
答案 4 :(得分:3)
今天,我向OpenJDK提交了有关此别名功能的JEP草案。我希望他们会重新考虑。
如果您有兴趣,可以在这里找到JEP草案:https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
答案 5 :(得分:2)
可笑的是Java还没有这个。 Scala有它
import com.text.Formatter
import com.json.{Formatter => JsonFormatter}
val Formatter textFormatter;
val JsonFormatter jsonFormatter;
答案 6 :(得分:0)
除非非默认构造函数有问题,否则你总是可以这样做(虽然我们都在等待 Java 语言规范的赶上):
public class YaddaYadda
{
private static class ZU extends eu.zrbj.util.ZrbjUtil_3_0 { }
public void foo (String s)
{
if (ZU.isNullOrEmpty(s))
{
// ...
对于项目范围内的使用,'import' 类可以进入一个单独的类文件,为导入提供单点定义。
这是一个救星,尤其是对于“库”类,即静态实用函数的集合。一方面,它使您能够对这些野兽进行版本控制 - 如示例所示 - 不会给用户带来很大的不便。
答案 7 :(得分:-3)
实际上可以创建一个快捷方式,这样你可以通过这样的方式在代码中使用较短的名称:
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();
}
}
通过这种方式,您只需要指定一次长名称,就可以拥有所需的特殊命名类。
我喜欢这个模式的另一件事是你可以将实现类命名为与抽象基类相同,并将它放在不同的命名空间中。这与导入/重命名模式无关。