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

問題


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

特にサブシステムを作成する場合、特定のメソッドやクラスを非表示にするのはかなり難しいことがよくあります。 トラブルが始まり、コードサブシステムは十分に大きいため、コードをより適切に編成するには、いくつかのサブパッケージが必要です。
たとえば、 com.system.persist.PropertyManagercom.system.network.PropertyUpdater両方で使用されるcom.system.InternalPropertyクラスがある場合、 InternalPropertypublicとして宣言する必要があります。

この投稿では、既存のソリューションについて話し、新しいアイデアを提案しようとします。



既存のソリューション


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ですか?

Source: https://habr.com/ru/post/J75468/


All Articles