不能把两个类组合成java

时间:2013-12-11 19:37:00

标签: java class

我将这两个类组合成一个单独的文件,但我不知道如何。

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() {
}

当我将导入语句放在一个文件中时 和同一文件中的类declerations,我在主类中得到错误'Unchecked'。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果它们之间的关系可以描述为“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可见性修饰符,您可以访问这些字段。

答案 2 :(得分:0)

正如其他人所说,Java 要求只有一个公共类可以在一个源文件中(除非另一个是static内部类),并且文件名需要匹配类名。其他语言如Scala放宽了这一要求。

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

但无论如何,如果你有两个公开的非static课程,你就会被困在两个文件中。