class - 什么时候需要在java中导入?

标签 class methods import java-7

以下意外编译并运行没有问题:

import info.gridworld.actor.Actor;
import java.util.ArrayList;

public class ChameleonKid extends ChameleonCritter
{
    public ArrayList<Actor> getActors()
    {
        ArrayList<Actor> actors = getGrid().getNeighbors(getLocation());
          ArrayList<Actor> frontBack = new ArrayList<Actor>();
          for(Actor i : actors)
              if(getLocation().getDirectionToward(i.getLocation())==getDirection())
                    frontBack.add(i);
        return frontBack;
    }
}

Actor 类中的 getLocation() 方法返回 Location 的一个实例。然后我调用 Location 类的 getDirectionToward() 方法。 getLocation().getDirectionToward(i.getLocation()) .这是如何运作的?我从未导入 Location 类。我如何使用它并调用它的方法?如果这是它的工作原理,我什么时候需要导入一个类?只有当我实例化它吗?

我正在使用 Java 7。

最佳答案

假设您有两种方法,一种返回 foo.Location另一个返回 bar.Location (两个完全不同的类碰巧具有相同的名称,但在不同的包中 - 完全有效):

foo.Location getFooLocation();
bar.Location getBarLocation();

当您可以在同一个类中使用这两个方法并链接一些方法时,您不需要导入:
if(getFooLocation().onlyInFoo()) {
  //...
}
if(getBarLocation().onlyInBar()) {
  //...
}

它有效是因为编译器完全确定 Location 的哪个版本(来自哪个包)你在用吗,它知道在哪里onlyInFoo()onlyInBar可用。

但是假设您需要一个局部变量:
Location location;
// much later
location = getFooLocation();

现在编译器真的不知道 Location你的意思是,所以你必须通过使用包继续类名来帮助他:
foo.Location location;

或通过导入该类:
import foo.Location;

你现在应该问:如果我想同时拥有 foo.Location 的局部变量怎么办?和 bar.Location ?好吧,很明显,您不能同时导入它们:
//WRONG
import foo.Location;
import bar.Location;

您可以再次做的是:要么根本不导入并使用完全限定名称:
foo.Location location1;
bar.Location location;

...或只导入一个位置:
import foo.Location;

//...
Location location1;     //foo.Location
bar.Location location2;

关于class - 什么时候需要在java中导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904067/

相关文章:

c++ - 如何将对象数组中的内容复制到 C++ 中的另一个数组中?

java - 为什么当 grails 项目作为 grails-app 运行时,我的 java 项目中的包无法编译,java 项目引用了 grails 项目

Ruby 在模型中包含模块的单一方法

java - 在 Eclipse 中导入项目的一部分

php - 在 PHP 中导出、修改和导入数据库数据的最佳方法

PHP:在 SQL 中插入时将每个数据放入单引号 (' ' )

php - 从另一个插件/扩展类覆盖插件的功能

c++ - C++ 标准是否解决了概念 "TYPE"?

c# - Singleton的无状态实例方法线程安全(C#)

java - 简单的 Java 方法无论用户输入如何都返回 0