【问题标题】:How do I have both a static function and class with the same name imported?如何导入同名的静态函数和类?
【发布时间】:2023-01-03 08:47:33
【问题描述】:

我怎样才能同时拥有同名的类和静态函数?

主.java

import static a.b.c;
import a.b.c;

public class main{
  public static void main(String[] args){
    c();
    c c2 = new c();
  }
}

a/b.java

package a;

public class b{
  public class c{
   public c(){
     System.out.println("new c");
   }
  }
  public static void c(){
    System.out.println("c");
  }
}

以下当前引发以下错误。

main.java:7: error: an enclosing instance that contains b.c is required
    c c2 = new c();
           ^
1 error

【问题讨论】:

  • 使用“c”的上下文使编译器清楚地知道要使用哪个。
  • @Tom 那么为什么下面的工作? import static a.b.c;import a.c;

标签: java


【解决方案1】:

采用有意义的类名和包名。遵循 Java 命名标准,类名开始用大写字母。所以 a.b.c 将与 a.b.C 不同,即使在您给出的可怕的单字符示例中也是如此。

public class B {
    public class C {
        public C() {
            System.out.println("new c");
        }
    }

    public static void c() {
        System.out.println("c");
    }
}

然后使用你的内部类C

public static void main(String[] args) {
    c(); // the static method
    a.B b = new a.B(); // to use an inner class
    C c2 = b.new C();
}

【讨论】:

  • 这不是问题的答案,只是代码风格建议。
  • @Tom 这比我的大多数答案都更固执己见,但是拥有 a.b.c 方法和 a.b.c 班级并故意尝试 import 两者都只是自找麻烦(而且都不是明确的)。
  • 这个建议是正确的,但这不是问题所在。问题是为什么允许这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多