Java:方法如何对未知类型的对象进行操作?

时间:2016-08-10 07:52:32

标签: java class methods import

考虑以下三个不同包中的三个Java类:

User.java

package user;

public class User {

    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User [name=" + name + "]";
    }
}

UserFactory.java

package factory;

import user.User;

public class UserFactory {

    private static User user;

    public static User getUser() {
        if (user == null) {
            user = new User();
        }
        return user;
    }

}

Test.java

package test;

import factory.UserFactory;

public class Test {
    public static void main(String[] args) {
        UserFactory.getUser().setName("StackOverflow");
        System.out.println(UserFactory.getUser());
    }
}

主要方法属于不会导入test.Test类的类user.User。但是,它可以在user.User类型上运行。

如何证明这种行为?

1 个答案:

答案 0 :(得分:3)

import语句的唯一目的是允许您在不完全指定名称的情况下使用import static的类型(或方法等)。它没有提供类型 - 它只是通过短名称提供。

在这种情况下,导入UserFactory类型,编译器知道UserFactory.getUser()返回的确切类型...该类型不需要命名在调用getUser()的代码中。

如果你想写:

User u = UserFactory.getUser();

然后您需要导入...或者您可以完全符合条件:

user.User u = UserFactory.getUser();

但除非您需要在源代码中引用短名称类型,否则不需要导入语句。