当前位置: 首页 > 面试题库 >

Java 静态导入方法的一个好用例是什么?

伏星汉
2023-03-14
问题内容

刚刚收到评论,我静态导入该方法不是一个好主意。静态导入是DA类中的一种方法,该类主要具有静态方法。因此,在业务逻辑的中间,我有一个da活动,显然似乎属于当前类:

import static some.package.DA.*;
class BusinessObject {
  void someMethod() {
    ....
    save(this);
  }
} 

审阅者并不希望我更改代码,也没有,但是我确实同意他的观点。不能静态导入的原因之一是方法的定义位置令人困惑,它不在当前类中,也不在任何超类中,因此花了太多时间来确定其定义(基于Web的审阅系统没有可点击的像IDE这样的链接:-)我真的不认为这很重要,静态导入仍然很新,很快我们都会习惯于定位它们。

但是,我同意的另一个原因是,不合格的方法调用似乎属于当前对象,并且不应跳转上下文。但是,如果确实存在,则扩展该超类将是有意义的。

所以,当它是有意义的静态导入的方法呢?你什么时候做的?你是否喜欢不合格的电话的外观?

编辑:流行的观点似乎是静态导入方法,如果没有人将它们混淆为当前类的方法。例如,来自java.lang.Math和java.awt.Color的方法。但是,如果abs和getAlpha不明确,我看不出为什么readEmployee是。与许多编程选择一样,我认为这也是个人喜好。

多谢你的回覆,我想解决这个问题。


问题答案:

这是从Sun发布该功能时的指南中得出的(原始内容为重点):

那么什么时候应该使用静态导入?非常谨慎!仅当你打算以其他方式声明常量的本地副本或滥用继承(常量接口反模式)时,才使用它。…如果你过度使用静态导入功能,它将使你的程序无法读取和不可维护,并使用你导入的所有静态成员污染其名称空间。代码的读者(包括你,在你编写代码后的几个月内)将不知道静态成员来自哪个类。从类中导入所有静态成员可能对可读性特别有害;如果只需要一个或两个成员,则分别导入它们。

(https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html)

我想特别指出两个部分:

  • 仅当你试图“滥用继承” 时才使用静态导入。在这种情况下,你是否会想拥有BusinessObject extend some.package.DA?如果是这样,静态导入可能是一种更清洁的方式来处理此问题。如果你从未梦想过扩展some.package.DA,那么这可能是对静态导入的不充分使用。键入时不要仅使用它来保存一些字符。
  • 导入个人成员。说import static some.package.DA.save而不是DA.*。这将使查找此导入方法的来源变得容易得多。
    就个人而言,我已经使用这个语言功能非常只能用常量或枚举很少,而且几乎总是,从不与方法。对我来说,这种权衡几乎是不值得的。


 类似资料:
  • 问题内容: 如果我用Java创建类的实例,为什么最好静态地调用同一类的静态方法,而不是使用this.method()? 当我尝试通过this.staticMethod()从自定义类的构造函数中调用静态方法staticMethod()时,我收到Eclipse的警告。 与 谁能解释为什么这是一件坏事?在我看来,编译器应该已经分配了对象的实例,因此静态分配内存将是不必要的开销。 编辑: 我听到的要点是,

  • 本文向大家介绍在一个静态方法内调用一个非静态成员为什么是非法的?相关面试题,主要包含被问及在一个静态方法内调用一个非静态成员为什么是非法的?时的应答技巧和注意事项,需要的朋友参考一下 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。

  • 问题内容: 我已阅读以下讨论: 如果私有帮助器方法可以是静态的,则它们应该是静态的;如果它们的类没有成员变量,则所有方法应该是静态的。 似乎人们通常会接受静态方法,但由于以下两个原因,对此有些怀疑: 他们很难测试。 他们违反了OO原则。(一个人说,它们是函数,而不是方法。) 最可接受的静态方法是 私有静态 方法。但是,为什么为什么根本不存在静态方法呢?在什么情况下,它们是最优先采用的方法? 问题答

  • 问题内容: 什么是静态工厂方法? 问题答案: 我们避免直接访问数据库连接,因为它们占用大量资源。因此,如果我们低于限制,我们将使用静态工厂方法来创建连接。否则,它将尝试提供“备用”连接,如果不存在则失败,并显示异常。

  • 在 JDK 1.5 之后增加了一种静态导入的语法,用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。如果一个类中的方法全部是使用 static 声明的静态方法,则在导入时就可以直接使用 import static 的方式导入。 静态导入使用 import static 语句,静态导入也有两种语法,分别用于导入指定类的单个静态成员变量、方法和全部静态成员变量、方法,其中导入指定类的单

  • 问题内容: Java main()方法的方法签名为: 此方法是否有理由是静态的? 问题答案: 该方法是静态的,因为否则会产生歧义:应调用哪个构造函数?特别是如果你的班级是这样的: JVM应该调用吗?它应该做什么x? 如果不是,JVM是否应该在不运行任何构造方法的情况下实例化?我认为不应该这样,因为这将对整个类进行特殊处理-有时你有一个尚未初始化的实例,并且必须在每个可以调用的方法中进行检查。 对于