Question

I am getting main.java: error: someId in someStruct is defined in an inaccessible class or interface but how can I solve this?

my main class:

import subdir.Subclass;  

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

my subdir.Subclass class:

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;
  }
}
Was it helpful?

Solution

If you want to access something from a different package, it must be public.

OTHER TIPS

You will not be able to access anything that is protected or private in another package. They must be public.

@DanielRuf, you don't have to create a new class file. You can use a nested class. I have fixed your code into a runnable example.

Your FIXED SOME_FOLDER/main.java: This file isn't really the important part, but here for completeness.

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

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

To Run:

  1. cd into SOME_FOLDER
  2. javac main.java
  3. java main

Expected Output:

[str]:string



Here is a more GENERAL example showing another use-case: I like to create utilities where functions are put into sub-containers that help to namespace out different categories of functions like so:

MyStaticUtil.pkg_var.sayHello();

Where some functions are categorized by being put into publically accessible helper objects in the class file, here is how you would do it:

Our Runner Class: (Same in Both Examples):

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

WRONG CODE:


error: sayHello() in PackageClass is defined in an inaccessible class or interface

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

CORRECT:


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]");
        };;
    };;
};;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top