問題
私は妄想です。 コードを書くとき、隠せる変数、メソッド、クラスをすべて隠します。 必要なメソッドとクラスのみを発見しようとしています。
特にサブシステムを作成する場合、特定のメソッドやクラスを非表示にするのはかなり難しいことがよくあります。 トラブルが始まり、コードサブシステムは十分に大きいため、コードをより適切に編成するには、いくつかのサブパッケージが必要です。
たとえば、
com.system.persist.PropertyManager
と
com.system.network.PropertyUpdater
両方で使用される
com.system.InternalProperty
クラスがある場合、
InternalProperty
は
public
として宣言する必要があります。
この投稿では、既存のソリューションについて話し、新しいアイデアを提案しようとします。
既存のソリューション
1.すべてのクラスを1つのパッケージに入れます。 内部オブジェクトにはデフォルトのアクセス修飾子を使用します。 例:
class InternalProperty
{
private final int c;
InternalProperty( int c)
{
this .c = c;
}
int getC()
{
return c;
}
}
* This source code was highlighted with Source Code Highlighter .
2.現在のパッケージ内でクラスコンストラクターを表示し、クラス自体とそのメソッドを
public
ます。 そうすると、ユーザーはそのようなクラスのインスタンスを作成できなくなります。 この例では、次のようになります。
public class InternalProperty
{
private final int c;
InternalProperty( int c)
{
this .c = c;
}
public int getC()
{
return c;
}
}
* This source code was highlighted with Source Code Highlighter .
私の考え
Javaの次のリリースに特別な注釈
@VisibleIn
含まれていれば素晴らしいことです。 この注釈は、クラス、クラスフィールド、またはメソッドに配置され、オブジェクトのスコープを拡張します。 私のコードは次のようになります。
@VisibleIn ( "com.system.network" )
@VisibleIn ( "com.system.persist" )
class InternalProperty
{
private final int c;
InternalProperty( int c)
{
this .c = c;
}
int getC()
{
return c;
}
}
* This source code was highlighted with Source Code Highlighter .
つまり、
InternalProperty
クラスは、そのパッケージ、
com.system.network
、および
com.system.network
両方で表示され
com.system.persist
。
この注釈は、コンパイル段階と実行段階の両方で使用されます。
Javaでこのようなものを見たいですか?
@VisibleIn
の欠点は
@VisibleIn
ですか?