アクセス修飾子を拡張するアイデア

問題



私は妄想です。 コードを書くとき、隠せる変数、メソッド、クラスをすべて隠します。 必要なメソッドとクラスのみを発見しようとしています。



特にサブシステムを作成する場合、特定のメソッドやクラスを非表示にするのはかなり難しいことがよくあります。 トラブルが始まり、コードサブシステムは十分に大きいため、コードをより適切に編成するには、いくつかのサブパッケージが必要です。

たとえば、 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



ですか?



All Articles