如何返回java私有内部类对象的对象
如何返回私有内部类的对象如何返回java私有内部类对象的对象,java,inner-classes,Java,Inner Classes,如何返回私有内部类的对象 public class MainClass{ public InnerClass getObj(){ return this.new InnerClass() } private class InnerClass{ InnerClass(){ } } } ------------- MainClass mc = new MainClass(); mc.getObj(); // assume I am n
public class MainClass{
public InnerClass getObj(){
return this.new InnerClass()
}
private class InnerClass{
InnerClass(){
}
}
}
-------------
MainClass mc = new MainClass();
mc.getObj(); // assume I am not holding it anywhere.
当我使用try-catch块进行检查时,上面的代码给出了一个空指针异常。
另外,当在调试模式下尝试时,它会显示“ClassNotFoundException”
但是我可以看到生成为MainClass$InnerClass.class的类文件,您只是忘记了getObj方法的返回类型
public InnerClass getObj(){return new InnerClass();}
您只是忘记了getObj方法的返回类型
public InnerClass getObj(){return new InnerClass();}
嗯,我没有同样的问题。以下是我对您的代码的修改版本:
class MainClass {
public static void main( String[] args ) {
MainClass mc = new MainClass();
InnerClass ic = mc.getObj();
System.out.println( ic );
}
public InnerClass getObj() {
return this.new InnerClass();
}
private class InnerClass {
InnerClass() {}
}
}
该代码的结果是:
MainClass$InnerClass@64c3c749
嗯,我没有同样的问题。以下是我对您的代码的修改版本:
class MainClass {
public static void main( String[] args ) {
MainClass mc = new MainClass();
InnerClass ic = mc.getObj();
System.out.println( ic );
}
public InnerClass getObj() {
return this.new InnerClass();
}
private class InnerClass {
InnerClass() {}
}
}
该代码的结果是:
MainClass$InnerClass@64c3c749
正如其他人已经指出的,您所需要做的就是修复方法的返回类型
但是,您应该注意,由于您在公共方法中导出非公共类型,因此会收到一条警告。正如其他人已经指出的那样,您需要做的只是修复方法的返回类型 但是,您应该注意,由于在公共方法中导出非公共类型,因此会收到警告。由于getObj是公共的,您应该根据需要将内部类保持私有并返回对象,或者将其公开并返回内部类 以下代码在示例中返回一个对象:
public class MainClass {
private class InnerClass {
InnerClass() { System.out.println("InnerClass"); }
}
public Object getObj(){
return new InnerClass();
}
public static void main (String[] argc) {
MainClass a = new MainClass();
System.out.println(a.getObj());
}
}
它打印出:
bash-4.2$ java MainClass
InnerClass
MainClass$InnerClass@53c059f6
正如您所看到的,构造函数没有问题。因为您的getObj是公共的,所以您应该将内部类保持私有并返回一个对象,或者将其公开并返回一个内部类,这取决于您的需要
以下代码在示例中返回一个对象:
public class MainClass {
private class InnerClass {
InnerClass() { System.out.println("InnerClass"); }
}
public Object getObj(){
return new InnerClass();
}
public static void main (String[] argc) {
MainClass a = new MainClass();
System.out.println(a.getObj());
}
}
它打印出:
bash-4.2$ java MainClass
InnerClass
MainClass$InnerClass@53c059f6
正如您所看到的,构造函数没有问题。我可以看到没有调用InnerClass的构造函数。我尝试将访问修饰符更改为public/none,其行为仍然相同,getObj的返回类型设置为void,因此您将无法返回任何内容。正确的返回类型应该是什么?感谢您的指点,我编辑了代码,它的InnerClass为我们编写了一个并发布了它。实际上,代码中有一些错误,我认为这是一些与InnerClass相关的访问,但是在做了适当的调试之后,问题是其他的。如果我提供实际的代码,它会更容易,但是。。现在很清楚了..我可以看到InnerClass的构造函数没有被调用。我尝试将访问修饰符更改为public/none,其行为仍然相同,getObj的返回类型设置为void,因此您将无法返回任何内容。正确的返回类型应该是什么?感谢您的指点,我编辑了代码,它的InnerClass为我们编写了一个并发布了它。实际上,代码中有一些错误,我认为这是一些与InnerClass相关的访问,但是在做了适当的调试之后,问题是其他的。如果我提供实际的代码,它会更容易,但是。。现在很清楚了。我不知道为什么它在我的projectlittle diff代码中不起作用,但是当我复制并运行你的代码时,它工作得很好。。如果没有的话,我会在复习完后试着对问题进行适当的修改。。将标记您的正确。在这种情况下,main可以看到私有类型,因为它在同一个类中。如果main在另一个类中,它将不工作我不确定为什么它在我的项目中不工作Little diff代码,但是当我复制并运行您的代码时,它工作正常。。如果没有的话,我会在复习完后试着对问题进行适当的修改。。将标记您的正确。在这种情况下,main可以看到私有类型,因为它在同一个类中。如果main在另一个类中,它将不起作用编辑它,但返回新的InnerClass将不起作用,必须使用this.new InnerClass。编辑它,但返回新的InnerClass将不起作用,必须使用this.new InnerClass。他抱怨出现NullPointerException,这不能作为标记“void”包含“return”的方法的结果。这是因为“void”/“return”冲突是编译时错误,而NullPointerException是运行时异常。如果他发布的代码不能通过编译时间,他怎么可能得到运行时异常?直观的答案是:他发布了错误的代码,“void”/“return”问题在他的实际代码库中并不存在,他的问题仍然存在完全正确!然而,随着大量答案的到来,我至少想让大家注意到,所提供的示例代码在公共API中公开了非公共类型。如果发布了错误的代码,我们真的无法调试和帮助+对于这一点为1,对于SSCCE为+1,他抱怨NullPointerException,这不能因为标记包含“return”的方法为“void”而产生。这是因为“void”/“return”冲突是编译时错误,而NullPointerException是运行时异常。如果他发布的代码不能通过编译时间,他怎么可能得到运行时异常?直观的答案是:他发布了错误的代码,即“void”/“return”pro
这个问题在他的实际代码库中并不存在,他的问题仍然存在完全正确!然而,随着大量答案的到来,我至少想让大家注意到,所提供的示例代码在公共API中公开了非公共类型。如果发布了错误的代码,我们真的无法调试和帮助+此为1,SSCCE为+1