問題タブ [class-visibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
352 参照

c# - CodeContracts の静的チェックは、InternalVisibleTo を使用しているにもかかわらず、別のアセンブリの内部クラスのメンバーが十分に表示されていないことを示しています

私は Visual Studio 2012 でプログラムを書いており、2 つの別々のプロジェクトに 1 組のクラスがあります。

プロジェクトA:

プロジェクトB:

AssemblyInfo.csProjectB には、次のものもあります。

これは、CodeContract 静的分析をオンにするまで問題なくコンパイルされます。この時点で、 ccrewrite: からエラーが発生しますMember 'Test.B.X' has less visibility than the enclosing method Test.A.#ctor(Test.B)

問題を引き起こしている可能性があると私が考えることができる唯一のことは、 CodeContracts が ProjectA が ProjectB の内部を参照できることを認識していないためB、このコンテキストではクラスの可視性が本質的にないと考えていることです。アサーションを に変更すればb != null問題ないようですが、この議論は筋が通らないかもしれません。

誰でもこのアサーションを確認したり、正しい説明をしたりできRequiresますBか?

0 投票する
2 に答える
672 参照

java - Eclipse - 同じパッケージの別のプロジェクトのクラスにアクセスしたいのですが、どうすればよいですか?

私は Java プロジェクトに Eclipse IDE を使用しており、プロジェクト ( など) に関連するすべてのProject_1クラスProject_2は package 内にありますpackage_name

私は現在2つのクラスに取り組んでいます。

class_name.java( Project_2/ package_name)

utility.java( Project_1/ package_name)

すべてのメソッドはpublic. utility.javain内のメソッドを使用するにはどうすればよいclass_name.javaですか?

0 投票する
1 に答える
528 参照

java - サブパッケージ クラスを公開しない Java サブパッケージ

ルート パッケージに 20 個のクラスがあるとします。ルート パッケージの下に 3 つのサブパッケージを作成して、クラスを整理することにしました。次に、5 つのクラスを各サブパッケージに入れ、ルート パッケージに 5 つのクラスを残します (これらはトップ レベルのクラスであるため)。ルート パッケージ内の 5 つのクラスからサブパッケージ内のクラスを使用する必要があるため、サブパッケージ内のクラスを公開することになりますが、サブパッケージ化する前は、それらのクラスはパッケージ内でのみ公開されます。

上記のコード構成は、適切なガイダンスに従って行われます。サブパッケージは、レイヤー別ではなく機能別です。パッケージが最小化される前の相互依存性。それでも、多くのサブパッケージ クラスは、より高いレベルからアクセスするのが理にかなっています。

この種のシナリオに対処するための適切な方法はありますか?

0 投票する
1 に答える
69 参照

java - デフォルトのアクセス権を持つクラスに public メンバーが含まれている場合、javac は警告を出さない

以下のコード例では、クラス Test 内の Test() コンストラクターは public ですが、クラス Test 自体は public ではないため、Test() コンストラクターを自身のパッケージの外から呼び出すことはできません。

それは public キーワードを冗長にしますか? もしそうなら、アクセスが暗黙的にデフォルトとして宣言されているクラス (「パッケージ プライベート」) 内で使用されている場合、javac が public の冗長な使用に関する警告を発行しないのはなぜでしょうか?

Test.java、パッケージ テスト -

Main.java、パッケージメイン -

編集:

明確にするために、警告が表示されないのは、Test.java をコンパイルするときです。

0 投票する
2 に答える
386 参照

java - Java のパッケージ プライベート クラスの改善

私の経験では、Java のクラスのパッケージ プライベート可視性は冗長であることが判明しています。

パッケージ プライベートの可視性は、別のクラスによってほぼプライベートに使用されるクラスが同じパッケージに保持される可能性が高いという前提に基づいているようです。多くの場合、そうではありません。アクセス修飾子/代替メカニズムの改善を検討している人はいますか?

package-private 可視性を使用しようとする際の問題:

  • この利点を得るために、機能的に無関係なクラスを同じパッケージに入れたくなります

代わりに public を使用する際の問題:

  • API は汚染されます。ライブラリ Jar がインポートされると、クライアントは心配する必要のない他のいくつかのパブリック クラスを確認します。
  • コーディング標準の観点からすると、開発者が時間に追われて短絡呼び出しを行わないようにする簡単な方法はありません (短絡呼び出しとは、レイヤーをバイパスするメソッド呼び出しを意味します (サーブレットから DAO への直接接続など)。豆/BO)

現在の回避策:

  • 短絡呼び出しを思いとどまらせるために、通常、アプリケーションのさまざまな部分をいくつかの JAR にパッケージ化し、各ビルドのビルド環境でそれぞれの JAR のみが利用できるようにします。(たとえば、swing クライアント クラスのコンパイル中は、server.jar は使用できません。使用できるのは、クライアント クラスと common.jar だけです。)

質問:

  1. 新しい可視性修飾子/代替案を考え出すことは有用ではないでしょうか?
  2. これらの線に沿ったものはすでにパイプラインに入っていますか?
  3. Spring/Guice のようなフレームワークは十分な代替品ですか?
0 投票する
2 に答える
406 参照

c# - クラスインスタンスの作成制限

同じインターフェイスを実装するアルゴリズム クラスが多数あります。別の「ファクトリ」クラスには、構成パラメーターを介して正しいアルゴリズム クラスをインスタンス化し、そのインスタンスで start メソッドを呼び出す責任があります。

アルゴリズム クラスのコンストラクタ (またはその他のインスタンス作成メカニズム) の可視性をファクトリ クラスのみに制限したいと思います。

どうすればこれを解決できますか? 私が考えることができる唯一のクリーンな解決策は、これらのクラスを別の .dll に移動し、アルゴリズム クラスをプライベートに変更することですが、それは私が今やりたいことではありません。

0 投票する
4 に答える
2563 参照

c# - C# 拡張メソッドの可視性を同じアセンブリ内のクラスに制限できますか?

これらのファイルがあるとします:

MyCode.cs

OtherCode.cs

2 つのファイルは同じアセンブリの一部です。Foo を MyCode.cs にアクセス可能にする方法はありますが、OtherCode.cs にはアクセスできませんか? 私の質問は次の質問に似ています: C# 拡張メソッドは 1 つのクラス (「プライベート」) 内でのみ表示およびアクセスできます が、その受け入れられた答えは、私が探しているものではありません。作業中のコードにのみ表示される拡張メソッドを作成したいのですが、上記の質問への回答によると、誰かが「using」ステートメントを追加することでアクセスできます。同じアセンブリ内の別のクラスでさえ、自分のコードにのみ表示され、の場所には表示されない拡張メソッドを作成する方法はありますか?

拡張メソッドを呼び出すための構文が便利で、私が取り組んでいることに役立つのでお願いします (そうでなければ、代わりにプライベート メソッドを作成するだけです)。彼らが想定していることをしない場合に備えて、彼らのコード。Visual Studio の Intellisense のおかげで、私の拡張メソッドは現在、使用可能なメソッドのリストに表示されています (それらが含まれる名前空間を追加するオプションと共に)。