【问题标题】:cannot combine two classes java不能结合两个类java
【发布时间】:2013-12-11 19:36:59
【问题描述】:

我想将这两个类合并到一个文件中,但我不知道如何。

import java.util.LinkedList;

public class BFSolver{
public static boolean[][] didVisit;
public static LinkedList<Pair> expanded ;
public BFSolver() {
}

另一个类看起来像这样:

import java.util.LinkedList;

public class DFSolver{
public static boolean[][] didVisit;
public static LinkedList<Pair> expanded = new LinkedList<Pair>();
public DFSolver() {
}

当我将导入语句放在一个文件中时 和同一个文件中的类声明,我在主类中收到错误“未检查”。

【问题讨论】:

  • 为什么要将它们放在同一个文件中?!
  • 为什么要合并它们?事实上,除了 1 个字母外,它们看起来都一样。您是否会更好地创建 1 个可以子类化的类?
  • Java 每个文件只能有一个公共类。
  • 此外,我看到每个类声明中缺少}

标签: java class


【解决方案1】:

您不能在同一个 java 文件中放置多个公共类,内部类除外。

【讨论】:

  • @Eric Nielsen - 答案可能应该更具体。如前所述,它并不完全正确,因为它没有考虑内部类。
【解决方案2】:

如果它们之间的关系可以描述为“BFSolver是一个DFSolver”,那么您可以使用继承来解决这个问题。这两个类必须位于不同的文件中,因为它们都是公开的。

public class DFSolver {
    protected boolean[][] didVisit;
    protected List<Pair> expanded;

    public DFSolver() {
        // impl
    }

    // further impl
}

public class BFSolver extends DFSolver {
    public BFSolver() {
        // impl
    }
}

这里的好处是你不必复制或重写代码到BFSolver;使用 protected 可见性修饰符,您可以访问这些字段。

【讨论】:

    【解决方案3】:

    正如其他人所说,Java 要求单个源文件中只能有一个公共类(除非另一个是 static 内部类),并且文件名需要与班级名称。 Scala 等其他语言放宽了这一要求。

    更有趣的是为什么你觉得你想要。相反,看起来您要么想要将这些类组合成一个继承树(尽管它们仍然必须是不同的文件),因为它们共享行为,要么将公共代码组合成两个类都可以委托给的实用程序类。

    但无论如何,如果你有两个非static 的公共类,你就会被两个文件困住。

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多