ジャバ:静的なネストされたクラスを返す
-
22-09-2019 - |
質問
静的に入れ子になったクラスがあり、これを静的アクセサー (ゲッター) 経由で返したいと考えています。
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 は変数ではなくクラスであるため、これが機能しない理由はわかっていますが、他の理由により、列を静的クラスとして保持する必要があります。これが実現可能かどうかさえわかりませんが、可能だったかどうかだけ聞きたいですか?
ありがとう!
解決
さて、あなたの静的な入れ子になったクラスが公開されている場合は、あなたが直接ネストされたクラスにアクセスすることができながら、アクセサを作成したい理由を、あなたの例のように、私は思ったんだけど。
他のヒント
あなたはまだのように、クラスをインスタンス化する必要があります
return new Columns();
列は静的ではなかったし、あなたがどこかからそれをインスタンス化したい場合は、は、
外部クラスのインスタンスを必要としますreturn new SomeClass().new Columns();
あなたが行うことができますあなたのソリューションでは、
return new SomeClass.Columns();
を返しますか? クラス カラム またはのインスタンス カラム ?
前者については、次を使用できます
return SomeClass.Columns.class; // SomeClass.Columns can also be accessed directly,
// since it is public.
後者の場合は、次を使用できます
return new SomeClass.Columns();
あなたが実際にあなたの
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
を返す、Columns
のスーパークラスを作成」に関するご意見の一つから、これは設計上の問題のようです。継承のかもしれないが、物事を悪化させるので、あなたは、静的メソッドをオーバーライドすることはできません。
public static Columns<?> getColumnEnumerator()
あなたは列のインスタンスを返す必要があること、この手段ます。
どの程度
return new Columns();
または、あなたが同じインスタンスをしたい場合は、すべての時間
return Columns.privateSingletonInstance; // from a static field
所属していません StackOverflow