【问题标题】:Java: possible locations for "import" statement [closed]Java:“import”语句的可能位置[关闭]
【发布时间】:2018-04-09 07:21:27
【问题描述】:

编辑:这没有意义。 import 不能以任何方式限制包访问。

默认情况下,我们将import a.b.SomeClass;语句写在每个java文件顶部的包名下方。

是否可以在代码后面使用import 语句?

背景:我们需要实现一个动态代码注入的接口。我们希望使其尽可能安全/可靠。这个想法是限制导入的包,但这只有在代码后面没有(简单)方法使用此语句时才有意义。

【问题讨论】:

标签: java syntax


【解决方案1】:

您可以使用任何类而无需通过使用它们的完全限定名称来导入它们,即com.evil.BadClass 而不是import com.evil.*;

这使得整个导入的事情变得无关紧要。只是为了方便开发,不能作为安全控制。

如果您希望确保安全,请查看SecurityManager,并确保您拥有了解安全方面的技术人员。如果此问题代表您的安全技能水平和 Java 知识,您将需要外部帮助。

【讨论】:

  • 当然,你是对的。我们只是在收集想法;)。
  • 如果您认真对待安全问题,这并不是“让我们收集一些想法”的情况。
  • 我猜这取决于环境。在我们的案例中,只有少数人可以访问此功能。所以它更多的是安全而不是安全。
  • We want to make it as safe/secure as possible.。你之前这么说。我真的不在乎,如果您实施了一些未经验证的自定义安全性,请不要自欺欺人。
【解决方案2】:

根据JLS §7.3. Compilation Units,导入声明在包声明之后,在类型声明之前:

编译单元:
[PackageDeclaration] {ImportDeclaration} {TypeDeclaration}

那么就可以通过完全限定的类名a.b.SomeClass 来使用SomeClass 而无需导入声明。

【讨论】:

    【解决方案3】:

    没有。

    导入语句在很大程度上是赋予当前 .java 文件的属性,而不是在遇到它的地方或时间要考虑的指令。

    你不能把它们放在别处,如果你能把它们放在其他地方也没关系,因为它们的意思与它们的位置无关。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多