java - Java 和 Scala 中的通配符导入用法

标签 java scala wildcard import

最近我经常听到诸如“你不应该使用通配符导入”之类的说法。所以我想就此向社区询问。无论如何,通配符导入真的永远不会在 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/

相关文章:

scala - 如何在构建时获取 SBT 暂存目录?

amazon-web-services - 主域上的 EV SSL 和子域上的 Wildcard SSL

shell - rm -rf/base-dir-path/*/work 与/base-dir-path/*/*/work 不同

java - Android按钮点击显示不同的Toast消息取决于点击次数

javascript - 使用 IDE Eclipse 在 Java 代码中使用 HTML、CSS 和 Javascript

java - 在 Intent 之间发送自定义模型列表

scala - 通过反射调用具有命名参数的方法

scala - HList参数为HNil时如何对Json进行编码?

ssl - 带有通配符 IP 的证书 subjectAlternativeName

java - Spring REST Web 服务 appContext 失败