在Python中,您可以执行以下操作:
from a import b as c
在Java中如何做到这一点,因为我有两个冲突的导入。
在Python中,您可以执行以下操作:
from a import b as c
在Java中如何做到这一点,因为我有两个冲突的导入。
当前回答
正如前面提到的,Java不提供这个特性。
该特性的实现已经被多次请求,例如JDK-4194542:类名别名或JDK-4214789:扩展导入以允许重命名导入类型。
评论如下:
这不是一个不合理的要求,尽管不是必要的。偶尔的 使用完全限定名不会造成不必要的负担(除非库 左右重复使用相同的简单名称,这是糟糕的风格)。 在任何情况下,它都没有通过一种语言的价格/性能标准 改变。
所以我猜我们不会很快在Java中看到这个特性:-P
其他回答
今天我向OpenJDK提交了关于这个别名特性的JEP草案。我希望他们能重新考虑。
如果您感兴趣,可以在这里找到JEP草案:https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
可笑的是java还没有这个功能。Scala有它
import com.text.Formatter
import com.json.{Formatter => JsonFormatter}
val Formatter textFormatter;
val JsonFormatter jsonFormatter;
实际上,创建一个快捷方式是可能的,这样你就可以在代码中使用更短的名称,方法如下:
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();
}
}
通过这种方式,您只需要指定一次长名称,并且可以拥有任意多个特殊命名的类。
我喜欢这种模式的另一个原因是,可以将实现类命名为与抽象基类相同的类,只是将其放置在不同的名称空间中。不过,这与导入/重命名模式无关。
可能值得注意的是,Groovy有这样的特性:
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
正如前面提到的,Java不提供这个特性。
该特性的实现已经被多次请求,例如JDK-4194542:类名别名或JDK-4214789:扩展导入以允许重命名导入类型。
评论如下:
这不是一个不合理的要求,尽管不是必要的。偶尔的 使用完全限定名不会造成不必要的负担(除非库 左右重复使用相同的简单名称,这是糟糕的风格)。 在任何情况下,它都没有通过一种语言的价格/性能标准 改变。
所以我猜我们不会很快在Java中看到这个特性:-P