2

静的にネストされたクラスがあり、静的アクセサー(ゲッター)を介して返したいと思います。

public class SomeClass
{
    public static class Columns<CC>
    {
        ...

        public static int length = 5;
    }

    public static Columns<?> getColumnEnumerator()
    {
        int x = Columns.length; //no problems

        return Columns; //compiler error
        //cannot find symbol: variable Columns location: blah.blah.SomeClass
    }
}

Columnsはクラスであり、変数ではないため、これが機能しない理由はわかっていますが、他の理由で、列を静的クラスとして保持する必要があります。これが実行可能かどうかさえわかりませんが、あったかどうか尋ねたいだけですか?

ありがとう!

4

5 に答える 5

2

さて、あなたの例のように、静的なネストされたクラスがパブリックである場合、ネストされたクラスに直接アクセスできるのに、なぜアクセサーを作成したいのか疑問に思います。

于 2010-01-22T06:09:44.733 に答える
1

次のように、クラスをインスタンス化する必要があります。

 return new Columns();

列が静的ではなく、他の場所からインスタンス化する場合は、外部クラスのインスタンスが必要になります

return new SomeClass().new Columns();

あなたのソリューションであなたはすることができます:

return new SomeClass.Columns();
于 2010-01-22T06:42:43.273 に答える
1

クラス ColumnまたはColumnのインスタンスを返しますか?

前者の場合は、

return SomeClass.Columns.class; // SomeClass.Columns can also be accessed directly,
                                // since it is public.

後者の場合、次を使用できます

return new SomeClass.Columns();
于 2010-01-22T06:57:57.900 に答える
1

Columnsクラスの使用方法を実際に説明すると役立つ場合があります。そのインスタンスを取得しようとしていますか、それともそれがどのクラスであるかを取得しようとしていますか?

インスタンスを返してClass、呼び出し元のメソッドがインスタンスで使用できるようにすることができますnewInstance()

public static Class<Columns> getColumnEnumerator()
{
    int x = Columns.length;

    return Columns.class;
}

Columnsまたは、次のように変更する必要があります。

public class SomeClass
{
    public static class Columns<CC>
    {
       public final int LENGTH = 5;  // changed to a final, or create an accessor

       ...

       private Columns() { ... }  // private constructor
    }

    public static Columns<?> getColumnEnumerator()
    {
        Columns columns = new Columns();  // only SomeClass can instantiate this
        int x = columns.LENGTH;

        return columns;
    }
}

SomeClassしかし、「を返すスーパークラスを作成する」についてのコメントの1つからColumns、これは設計上の問題のようです。静的メソッドをオーバーライドできないため、継承によって状況が悪化する可能性があります。

于 2010-01-22T08:19:14.873 に答える
0
 public static Columns<?> getColumnEnumerator()

これは、Columnsのインスタンスを返す必要があることを意味します。

どうですか

 return new Columns();

または、常に同じインスタンスが必要な場合

 return Columns.privateSingletonInstance;  // from a static field
于 2010-01-22T06:07:32.760 に答える