我得到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;
}
}
如果你想从不同的包中访问某些东西,它必须是public
。
您将无法在另一个包中访问任何protected
或private
。他们必须是public
。
@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;
}
};;
};;
跑步:
预期产出:
[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]");
};;
};;
};;