Java静的内部クラス特性の詳細
前に書く
知らず知らずのうちに、私は正式に入社して部門の実習にも1週間以上かかりました.この時間は確かに多くのことを学びました.大企業の事務、事務の流れの準則から、プログラマーの日常の研究開発の仕事とその中の注意事項まで、指導者と同僚たちは私を助けてこの新しい環境に溶け込むことを喜んでいます.実習生は残業しないので、余暇も多いです.***fighting~!
考え方の出所
先日、部門プロジェクトのソースコードを見たとき、このような構造を読みました.
多くの実用的なエンジニアリングファイルでは,静的内部クラスと静的変数の使用が一般的であることが分かった.そこでいくつかの書籍資料をめくって、静的な内部クラスを深く勉強して、ここで総括します.不足、不適切な点があれば、レンガをたたいて指摘してください.
静的内部クラス特性の詳細
静的内部クラスの使用シーン
静的内部クラスの使用を考慮すると、外部クラスが内部クラスを使用する必要があり、内部クラスが外部クラスリソースを必要とせず、内部クラスが単独で作成できる場合、静的内部クラスの設計を考慮するシーンが一般的です.
静的内部クラスの使用制限
外部クラスの各メソッド間で定義される内部クラスについて、静的と非静的は使用時に異なる制限があり、主に以下のいくつかの違いにまとめられる.
(1)メソッド間で定義される非静的内部クラス: ●周辺クラスと内部クラスは、互いに自分のプライベートメンバーにアクセスできます.非静的内部クラスでは、静的メンバー変数とメソッドは定義できません. (2)メソッド間で定義された静的内部クラス: ●外部クラスの静的メンバー変数とメソッドにのみアクセスできます. ●静的内部クラスインスタンスを作成するときに、静的内部クラスのインスタンスを外部クラスのインスタンスにバインドする必要はありません.(つまり、内部クラスはインスタンスを個別に作成できます)
静的内部クラスの使用例
静的内部クラスについては、「Effective Java」という本では、このような使用例も示しています.
クラスのコンストラクタまたはスタティックファクトリに複数のパラメータがある場合、このようなクラスを設計する場合は、特にほとんどのパラメータがオプションの場合にBuilderモードを使用することが望ましい. 2.パラメータの個数が決定できない場合は、最初からビルダーモードを使用することをお勧めします.
このようなパターンの使用は,オブジェクト向けの基本設計原則である開閉原則に合致していることが分かる.開閉原則とは,プログラム設計を可能な限り今後の拡張に開放できるようにするために,修正に対して閉じることである.上記の例のwithNameメソッドとwithAgeメソッドは、プログラム設計モードが拡張に開放されている例と見なすことができる.
知らず知らずのうちに、私は正式に入社して部門の実習にも1週間以上かかりました.この時間は確かに多くのことを学びました.大企業の事務、事務の流れの準則から、プログラマーの日常の研究開発の仕事とその中の注意事項まで、指導者と同僚たちは私を助けてこの新しい環境に溶け込むことを喜んでいます.実習生は残業しないので、余暇も多いです.***fighting~!
考え方の出所
先日、部門プロジェクトのソースコードを見たとき、このような構造を読みました.
public class A{
......//
public static class B{
......
}
......//
}
多くの実用的なエンジニアリングファイルでは,静的内部クラスと静的変数の使用が一般的であることが分かった.そこでいくつかの書籍資料をめくって、静的な内部クラスを深く勉強して、ここで総括します.不足、不適切な点があれば、レンガをたたいて指摘してください.
静的内部クラス特性の詳細
静的内部クラスの使用シーン
静的内部クラスの使用を考慮すると、外部クラスが内部クラスを使用する必要があり、内部クラスが外部クラスリソースを必要とせず、内部クラスが単独で作成できる場合、静的内部クラスの設計を考慮するシーンが一般的です.
静的内部クラスの使用制限
外部クラスの各メソッド間で定義される内部クラスについて、静的と非静的は使用時に異なる制限があり、主に以下のいくつかの違いにまとめられる.
(1)メソッド間で定義される非静的内部クラス: ●周辺クラスと内部クラスは、互いに自分のプライベートメンバーにアクセスできます.非静的内部クラスでは、静的メンバー変数とメソッドは定義できません. (2)メソッド間で定義された静的内部クラス: ●外部クラスの静的メンバー変数とメソッドにのみアクセスできます. ●静的内部クラスインスタンスを作成するときに、静的内部クラスのインスタンスを外部クラスのインスタンスにバインドする必要はありません.(つまり、内部クラスはインスタンスを個別に作成できます)
/**
* 。
*/
// :
Inner i = new Inner();
// :
Outer o = new Outer();
Inner i = o.new Inner();
静的内部クラスの使用例
静的内部クラスについては、「Effective Java」という本では、このような使用例も示しています.
public class Outer {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(int age) {
this.age = age;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Outer build() {
return new Outer(this);
}
}
private Outer(Builder b) {
this.age = b.age;
this.name = b.name;
}
}
クラスのコンストラクタまたはスタティックファクトリに複数のパラメータがある場合、このようなクラスを設計する場合は、特にほとんどのパラメータがオプションの場合にBuilderモードを使用することが望ましい. 2.パラメータの個数が決定できない場合は、最初からビルダーモードを使用することをお勧めします.
このようなパターンの使用は,オブジェクト向けの基本設計原則である開閉原則に合致していることが分かる.開閉原則とは,プログラム設計を可能な限り今後の拡張に開放できるようにするために,修正に対して閉じることである.上記の例のwithNameメソッドとwithAgeメソッドは、プログラム設計モードが拡張に開放されている例と見なすことができる.