返回内部类的静态方法

时间:2010-10-30 13:52:32

标签: java static-methods inner-classes

我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码?

public class MyClass
{
    private class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

3 个答案:

答案 0 :(得分:13)

你必须说内部类是静态的,因为非静态绑定到实例,所以它不能从静态方法返回

public class MyClass
{
    private static class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

答案 1 :(得分:2)

(非静态)内部类实例始终与它们所包含的类的实例相关联。静态方法将在不引用MyClass的特定实例的情况下被调用,因此如果它创建了MyClass2的实例,则不会有MyClass的实例与之关联。

答案 2 :(得分:0)

是,

因为99%的时间你不希望它们是静态的; D

静态“嵌套”类只不过是在另一个类中定义的“顶级”类。如果上面例子中的静态类MyClass2是公共的,你可以说新的MyClass.MyClass2();在普通的“内部类”的情况下,你会想到一个对象,而不是MyClass类:MyClass some = new MyClass()然后像new some.MyClass2()(我忘记了确切的语法)。

此致