最近我经常听到诸如“你不应该使用通配符导入”之类的说法。所以我想就此向社区询问。无论如何,通配符导入真的永远不会在 Java 生产代码中使用吗?这条规则有异常(exception)吗?我对您的个人经历和意见很感兴趣。您在生产代码中使用它们吗?您会推荐给其他人吗?你如何使用它们 - 你能推荐最好的制作方法吗?
从 Scala 的角度来看它也很有趣。这同样适用于 Scala 吗?或者 Scala 中的通配符导入应该只用于演示幻灯片和 SO 答案?
如果你会看scalaz page ,例如,他们建议使用通配符导入,例如:
import scalaz._
import Scalaz._
我认为考虑通常使用通配符导入的隐式转换也很重要。
最佳答案
在 Scala 中,通配符导入是必须的,因为许多库希望它们的隐式转换在范围内,但它们的命名并不总是方便。所以,
import collection.JavaConversions._
是个好主意,而
import collection.JavaConversions.{asJavaConcurrentMap,enumerationAsScalaIterator,...}
非常尴尬。更好的是,在 Scala 中,您可以将导入放在任何范围内:
package mypackage {
class MyClass {
def myGraphicalWidgetHandler {
import java.awt._
...
}
...
}
...
}
这确实有助于使命名空间在整个文件中保持整洁。您可以有选择地重命名您知道会发生冲突的导入部分:
import java.awt.{List => AwtList, _}
相比之下,在 Java 中,您只能在全局范围内进行导入,并且不能重命名它们;您也没有隐式转换,因此可以只提取您正在寻找的那些东西。另一方面,您拥有强大的 IDE 支持,这将有助于找到您正在寻找的类并为您导入它。因此,对于 Java,有一个合理的论点是您应该让您的 IDE 只引入您需要的东西,而不是您决定获取所有东西。就个人而言,我仍然觉得这太尴尬了,大部分时间只使用通配符导入。
关于java - Java 和 Scala 中的通配符导入用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311087/