无法访问班级的公共领域

时间:2017-09-15 04:08:23

标签: java

编辑:我已经修改了这个问题以回应一些评论/答案。我正在打印出对象字段,但它仍然会中断。在这一点上,我猜是javarepl的错。

我是Java的新手,所以对这个非常基本的问题表示歉意。我在javarepl中玩Java。

     class SomeKlass {
        public int someField;

        public SomeKlass(int inputField) {
         someField = inputField;
        }
      }

      SomeKlass someObj = new SomeKlass(1);

      System.out.println(someObj.someField)

      ERROR: cannot find symbol
      symbol:   variable someField
      location: variable someObj of type java.lang.Object
      System.out.println(someObj.someField);

为什么即使我将其声明为someField的公共字段,我也无法访问SomeKlass

4 个答案:

答案 0 :(得分:4)

错误消息"错误:不是声明"表示问题,someObj.someField变量,并且repl不知道您要对该变量做什么。如果你想打印它,你可以这样做

System.out.println(someObj.someField);

答案 1 :(得分:0)

您应该访问它没有问题,虽然暴露您的字段是不好的做法。 Getters和Setters会更合适。如果你制作一个主方法,你应该能够运行它。

class App {
    public static void main(String[] args) {
        SomeKlass someObj = new SomeKlass(1);
        System.out.println(someObj.someField);
    }
}

现在正确的方法是使用getter和setter。 在你的班上:

private someField;

public int getSomeField(){
    return someField;
}

public int setSomeField(int someFieldInput){
    someField = someFieldInput;
}

答案 2 :(得分:0)

因为你正在使用javarepl我正在分享我的ans, 如果要使用javarepl打印变量值,可以执行以下操作 new SomeKlass(1).someField; enter image description here 到目前为止我还没有使用过javarepl,但是如果你使用像Eclipse这样的IDE会更好。

答案 3 :(得分:-1)

首先,假设这是您编写的确切代码,那么我可以建议您需要在声明的方法中执行访问任何变量,即主方法或其他内容。

其次,你不能只是让一些字段进入并留在那里而不给它分配东西或者不将它分配给某些东西。因此, someObj.someField;不是正确的Java语法。

以下示例将为您提供帮助。

public class SomeKlass {
    public int someField;

    public SomeKlass(int inputField) {
     someField = inputField;
    }
    public static void main(String[] args) {

        SomeKlass someObj = new SomeKlass(1);

        someObj.someField = 1;      // Assign something to it.
        int i = someObj.someField;  //Assign it to something.
        System.out.println(i);
    }
}