6

我得到了类型测试的没有封闭实例是可访问的。必须使用类型测试错误的封闭实例来限定分配,Location ob1 = new Location(10.0, 20.0);我不确定为什么..

package pkg;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Location ob1 = new Location(10.0, 20.0);
        Location ob2 = new Location(5.0, 30.0);
        ob1.show();
        ob2.show();
        ob1 = ob1.plus(ob2);
        ob1.show();
        return;
    }

    public class Location // an ADT
    {
        private double longitude, latitude;

        public Location(double lg, double lt) {
            longitude = lg;
            latitude = lt;
        }

        public void show() {
            System.out.println(longitude + " " + latitude);
        }

        public Location plus(Location op2) {
            Location temp = new Location(0.0, 0.0);
            temp.longitude = op2.longitude + this.longitude;
            temp.latitude = op2.latitude + this.latitude;
            return temp;
        }
    }
}
4

4 回答 4

11

尝试

Location ob1 = new test().new Location(10.0, 20.0);
Location ob2 = new test().new Location(5.0, 30.0);

你需要先创建一个外部类的实例,然后你可以创建一个内部类的实例

于 2013-10-02T16:22:05.800 回答
7

您可以考虑将它们拆分为 2 个文件。看来您的意图不是创建嵌套类,而是让一个测试器类调用您的核心类。

文件 #1:Test.java

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Location ob1 = new Location(10.0, 20.0);
        Location ob2 = new Location(5.0, 30.0);
        ob1.show();
        ob2.show();
        ob1 = ob1.plus(ob2);
        ob1.show();
        return;
    }
 }

文件 #2:Location.java

public class Location // an ADT
{
    private double longitude, latitude;

    public Location(double lg, double lt) {
        longitude = lg;
        latitude = lt;
    }

    public void show() {
        System.out.println(longitude + " " + latitude);
    }

    public Location plus(Location op2) {
        Location temp = new Location(0.0, 0.0);
        temp.longitude = op2.longitude + this.longitude;
        temp.latitude = op2.latitude + this.latitude;
        return temp;
    }
}

当您在单个 java 文件中定义多个类时,最终会在它们之间创建依赖关系,因此您会收到错误“封闭类型实例”。在您的代码中,Test包含Location。这些是嵌套类,除非您有充分的设计理由以这种方式编写类,否则最好还是坚持 1-file to 1-class 方法。

于 2013-10-02T16:29:09.350 回答
0

我对java很陌生,但我找到了解决这个问题的方法。问题是大括号的错误封闭。

package pkg;

public class test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Location ob1 = new Location(10.0, 20.0);
    Location ob2 = new Location(5.0, 30.0);
    ob1.show();
    ob2.show();
    ob1 = ob1.plus(ob2);
    ob1.show();
    return;
}
}

public class Location // an ADT
{
    private double longitude, latitude;

    public Location(double lg, double lt) {
        longitude = lg;
        latitude = lt;
    }

    public void show() {
        System.out.println(longitude + " " + latitude);
    }

    public Location plus(Location op2) {
        Location temp = new Location(0.0, 0.0);
        temp.longitude = op2.longitude + this.longitude;
        temp.latitude = op2.latitude + this.latitude;
        return temp;
    }
}
于 2018-04-14T03:51:28.963 回答
0

您可以采取多种解决方案来修复错误:

  1. 如前所述 - 将两个类放在单独的文件中

  2. 使您的内部类也静态

        public static class Location { ... }
    
  3. 假设这仅用于测试/学习目的并且您想要修复错误 - 您可以这样调用“位置”类。提到这种情况是因为这说明了错误的根源——如果类不像原始问题中那样是静态的——你必须从父类中创建一个对象才能访问内部类。但是,除非您有特殊原因,否则修复 1,2 会更好。

    Location ob1 = new test().new Location(10.0, 20.0);
    Location ob2 = new test().new Location(5.0, 30.0);
    
于 2019-12-23T18:57:26.303 回答