繁体   English   中英

如何在java中导入包?

[英]How to import a package in java?

我正在尝试从本教程学习java和awt框架: https//www3.ntu.edu.sg/home/ehchua/programming/java/j4a_gui.html ,但我遇到了绊脚石:你怎么做进口包裹? 例如,这是我不想做的事情:

import java.awt.*  //pollutes global namespace and results in hard-to-trace class names

每次我想使用其中一个awt包的类时,我也不想引用java包:

setLayout(new java.awt.FlowLayout()) //cumbersome and redundant

我想做的是这样的:

from java import awt
setLayout(new awt.FlowLayout()) //I want to use awt here without saying java.awt

这样的东西在java中是可能的,还是语言不允许它?

我也不知道setLayout来自哪里,但这不是重点。 我假设它是一个静态的Frame方法,被隐式调用?

如果您担心污染,可以导入个别课程。

import java.awt.Rectangle;
import java.awt.Graphics2D;
...

我不相信无论如何都要做你所描述的。

值得指出的是,您可以使用通配符进行导入,并使用完整的包名清除任何不明确的情况。

import java.awt.*;
import opencv.*; //both awt and opencv have a Rectangle class

void foo() {
    java.awt.Rectangle r1 = new java.awt.Rectangle();
    opencv.Rectangle r2 = new opencv.Rectangle();
}

另请参阅此信息以获取更多信息: https//stackoverflow.com/a/149282/4484072

@LewBloch提出了一个重要的观点,即java包没有真正的层次结构。 因此,例如, java.awt.*将仅包含该包中的内容,而不包括以java.awt开头的其他包,例如java.awt.event 这些名称看起来好像与您有关,但实际上由JVM单独处理

不,你不能拆分包名。 您有两种选择:

  1. import java.awt.FlowLayot; 这导入包java.awt的类FlowLayout

  2. import java.awt.*; 这将导入所有类java.awt包。

在Java中,您可以执行导入

import java.awt。*; 这会将所有awt类导入到您的程序中,无论您是否全部使用它们,而是导入程序中的所有awt类。 通过这种方式,您可以通过导入所有awt类来重载程序。

相反,您可以通过指定类名来执行您想要的操作.. import java.awt.FlowLayout; 这将仅导入类文件。 这是java中的标准和可接受的方式。

java static import import static java.lang.System。*; 如果你想在类中使用静态方法,你可以这样使用。 这样就可以在静态方法之前避免使用类名。

如果你打算在awt包上工作..我建议你按类名导入。 大多数awt组件都采用秋千包装进行翻新。 为避免出现问题,请使用带有包的类名,并考虑使用swing组件而不是awt。

据我所知,您希望在Java中使用类似C ++中的命名空间。

答:不,Java没有这样的功能。
您可以使用import for whole package(import java.awt。*),import for concrete class(import java.awt.Rectangle),或者在使用它时应该声明完整的类名(new java.awt.FlowLayout())。

没有其他的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM