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

问题描述 投票:3回答:3

我得到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;
  }
}
java java-7 public access-specifier
3个回答
8
投票

如果你想从不同的包中访问某些东西,它必须是public


1
投票

您将无法在另一个包中访问任何protectedprivate。他们必须是public


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 );
    };;
};;

你的FIXED 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主要

预期产出:

[STR]:串



这是一个更通用的示例,显示了另一个用例:我喜欢创建实用程序,其中函数被放入子容器中,这有助于命名不同类别的函数,如下所示:

Mistetikkutilpkagvarsaihello();

在某些函数通过放入类文件中可公开访问的辅助对象进行分类的情况下,您可以采用以下方法:

我们的Runner类:(两个例子都相同):

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]");
        };;
    };;
};;
© www.soinside.com 2019 - 2024. All rights reserved.