y中的x在无法访问的类或接口中定义,ID在结构中

时间:2014-02-03 19:40:42

标签: java java-7 public access-specifier

我得到main.java: error: someId in someStruct is defined in an inaccessible class or interface但我该如何解决?

我的主要课程:

import subdir.Subclass;  

public class main{  
  ...  
  Subclass.someArrayList.get(i).someString  
  ...  
}

我的subdir.Subclass类:

package subdir;

public class Subclass{


  public static java.util.ArrayList<someStruct> someArrayList = new java.util.ArrayList<someStruct>(java.util.Arrays.asList(
    new someStruct(3, "string", "string"),
    new someStruct(4, "string", "string")
  ));

}



class someStruct
{
  public int someId;
  public String someString;
  public String someString2;
  public someStruct(int someId, String someString, String someString2) {
    this.someId = someId;
    this.someString = someString;
    this.someString2 = someString2;
  }
}

3 个答案:

答案 0 :(得分:8)

如果您想要访问其他包中的内容,则必须为public

答案 1 :(得分:1)

您将无法访问其他包中protectedprivate的任何内容。它们必须是public

答案 2 :(得分:0)

@DanielRuf,您不必创建新的类文件。 您可以使用嵌套类。我已经将您的代码固定为可运行的示例。

您的FIXED SOME_FOLDER / main.java: 这个文件不是很重要的部分, 但是为了完整性。

import subdir.Subclass;  

public class main{  
    public static void main( String  []  args ){
        String
        str=(
            Subclass
            .someArrayList
            .get( 0 ) //:<--Hardcoded for example
            .someString  
        );;
        System.out.println( "[str]:"+str );
    };;
};;

您的固定SOME_FOLDER / subdir / Subclass.java:

package subdir;
public class Subclass{

    public static       java.util.ArrayList<someStruct> 
    someArrayList = new java.util.ArrayList<someStruct>(
        java.util.Arrays.asList(
            new someStruct(3, "string", "string"),
            new someStruct(4, "string", "string")
        )
    );;

    public static class someStruct
    {
        public int    someId     ;
        public String someString ;
        public String someString2;

        public someStruct(
            int    someId
           ,String someString 
           ,String someString2
        ){
            this.someId      = someId     ;
            this.someString  = someString ;
            this.someString2 = someString2;
        }
    };;
};;

要运行:

  1. 装入SOME_FOLDER
  2. javac main.java
  3. java main

预期输出:

  

[str]:字符串



这是另一个 GENERAL 例子,显示了另一个用例: 我喜欢创建将功能放入子容器的实用程序 有助于命名不同类别的功能,例如:

MyStaticUtil.pkg_var.sayHello();

其中一些功能通过放入其中进行分类 类文件中可公开访问的帮助对象, 这是您的操作方式:

我们的跑步者班:(两个示例中都相同):

import pkg.MyStaticUtil;
public class RunMe{
    public static void main( String  []  args ){
        MyStaticUtil.getPkgVar().sayHello();
        MyStaticUtil.pkg_var.sayHello();
    };;
};;

错误代码:


  

错误:PackageClass中的sayHello()在不可访问的类中定义   或界面

package pkg;

public class 
MyStaticUtil{

    public static PackageClass 
    pkg_var = new PackageClass();

    public static PackageClass
    getPkgVar(){
        return( MyStaticUtil.pkg_var );
    };;
};;

class  //:<<<<<<<<<<<<<<<<<<<<<<<<<<<<INACCESSIBLE
PackageClass{
    public static void
    sayHello(){
        System.out.println("[Hello]");
    };;
};;

正确:


package pkg;

public class 
MyStaticUtil{

    final public static PackageClass //:<--Final so component cannot be
    pkg_var = new PackageClass();    //:   "beheaded" (de-referenced/set to null)

    public static PackageClass
    getPkgVar(){
        return( MyStaticUtil.pkg_var );
    };;

    public static class  //:Accessible and not
    PackageClass{        //:required to be declared in another file.
        public static void
        sayHello(){
            System.out.println("[Hello]");
        };;
    };;
};;