【问题标题】:Accessing top level classes from within a Java package从 Java 包中访问顶级类
【发布时间】:2015-05-06 16:56:36
【问题描述】:

假设我们有一个位于文件夹project 的项目,其源代码位于project/src

我们在project/src/package 有一个包package 和类

  • TopClassproject/src/TopClass.java,和
  • PackageClassproject/src/package/PackageClass.java

现在我们想在PackageClass 内部调用TopClass 的构造函数,但是该构造函数(虽然声明为public)似乎在包内部不是不可见的。

我们需要以某种方式导入它吗?我们如何访问它?

【问题讨论】:

  • project/src/PackageClass.javaproject/src/package/PackageClass.java?
  • @BenWin 当然是后者。我修好了。

标签: java package visibility


【解决方案1】:

指定从未命名的包中导入类型是编译时错误。

所以要归档你想要做的事情,你必须使用某种间接的类访问,比如反射 API:

Class sampleClass = Class.forName("SampleClass");
Method sampleMethod = sampleClass.getMethod("sampleMethod" , new Class[] { String.class });
sampleMethod.invoke(sampleClass.newInstance(), "It works!");

使用默认包类:

public class SampleClass {
    public void sampleMethod(String str) {
        System.out.println(str);
    }
}

【讨论】:

  • 我有强烈反对这个答案的冲动,仅仅是因为它的内容所带来的后果。 (+1)
  • :)。至少您不会花更多时间尝试解决此问题。也许您可以接受答案,所以我们可以将这个话题视为已解决。
  • 好的,谢谢!您的答案没有提供完整的解决方案或对解决方案的引用。我认为您应该将其包括在内 - 否则无法完全解决。
  • 好吧,我为你添加了一个简单的方法。
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 2016-04-15
  • 2011-04-03
  • 2010-11-07
  • 2022-11-22
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
相关资源
最近更新 更多