静态导入用户在java中的其他包中定义包

时间:2013-10-09 13:56:17

标签: java java-ee

这是另一个问题:

package p1;

public class Temp {
    public static int x=10;
    public static void show(){
    System.out.println("hello from show");
    }
}

这是我的第二个文件的代码:

package p2;

import p1.*;
import static java.lang.System.*;

class StaticImport {
    public static void main(String[] args) {
        System.out.println(Temp.x);
        Temp.show();
        out.println(Temp.x + "hello");

    }
}

现在这个程序正在运行,输出是:

10
hello from show
10hello

我尝试将用户定义的包导入到另一个包中,并设置了我的类路径。 Java规则说,当使用import一个静态类时,所有方法和数据成员都可以在不使用类名的情况下访问。

package p2;

import static p1.Temp;
import static java.lang.System.*;

class StaticImport {
    public static void main(String[] args) {
        System.out.println(x);
        show();
        out.println(x + "hello");

    }
}

我收到了这个错误。为什么我不能将用户定义的包导入另一个包?

    C:\java\static_import>javac -d . StaticImport.java
StaticImport.java:3: error: cannot find symbol
import static p1.Temp;
              ^
  symbol: class p1
StaticImport.java:3: error: static import only from classes and interfaces
import static p1.Temp;
^
StaticImport.java:8: error: cannot find symbol
                System.out.println(x);
                                   ^
  symbol:   variable x
  location: class StaticImport
StaticImport.java:9: error: cannot find symbol
                show();
                ^
  symbol:   method show()
  location: class StaticImport
StaticImport.java:10: error: cannot find symbol
                out.println(x + "hello");
                            ^
  symbol:   variable x
  location: class StaticImport
5 errors

2 个答案:

答案 0 :(得分:3)

请改用import static p1.Temp.*;。您尝试导入的静态对象不在p1包中,而是在p1.Temp类中。

评论后修改:

C:\java\static_import文件夹中,您必须:

  • 包含p1文件的Temp.java文件夹;
  • 包含p2文件的StaticImport.java文件夹。

StaticImport.java中,将import static p1.Temp;行替换为import static p1.Temp.*;

最后,使用命令行:

cd C:\java\static_import
javac -d . p2/StaticImport.java
java p2/StaticImport

输出必须是:

10
hello from show
10hello

答案 1 :(得分:0)

您正在尝试导入包p1中的所有静态类,但Temp不是静态的,因此不会导入它。只需使用非静态导入。