問題タブ [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.
c++ - 保守性の観点から、公開されているAPIを削減することが望ましいと思われるのに、なぜ公開継承が推奨されるのですか?
私はbadaを使用しており、ここから始まるチュートリアルを参照してください。
パブリックAPIを削減するために、最近パブリック指定子を削除したコードを実行しています。これらのインターフェースを実装する関数は、すべてが公に宣言されていることがわかります。私はその必要性を認識せず、非公開にしました。自分のインターフェイスを実装するときに、これらのインターフェイスが私の具体的なクラスの通常のクライアントが受け取るよりも多くのアクセスを提供する可能性がある場合は、ためらうことなくこれを行います。
それらを公開する理由は何ですか、私は何が欠けていますか?
拡張性を支援することが提唱されていると思いますが、ライブラリではなくアプリを作成する開発者にとって、私はこの知恵に挑戦します。
java - パッケージ アクセス指定子の欠如を回避する方法は?
私はJavaが初めてです。コードを構造化しようとしているときに、Java はソース ファイルの編成 (ディレクトリ構造) をパッケージ構造に、パッケージ構造をクラスの外部可視性 (クラスは他のすべてのパッケージから可視であるか、まったく可視ではない) に密接に結び付けていることを発見しました。
これにより、適切なカプセル化を維持しながら、公開ライブラリの内部実装の詳細を関連する機能の論理ユニットに編成することが非常に困難になります。JSR 294はそれを最もよく説明しています:
現在、実装は複数のパッケージに分割できます。このような実装のサブパーツは、周囲のソフトウェア環境よりも、相互に緊密に結合する必要があります。今日、設計者は、実装の他の部分で必要とされるプログラムの要素を public として宣言することを余儀なくされています。
または、実装全体を 1 つのパッケージに入れることもできます。これは上記の問題を解決しますが、扱いにくく、すべてのサブパーツのすべての内部を相互に公開します。
私の質問は、この制限に対してどのような回避策があり、長所と短所は何ですか? JSR で 2 つ言及されています。論理グループ化にパッケージを使用します (カプセル化に違反しています)。すべてを 1 つのパッケージに入れます (扱いにくい)。これらの回避策に他の長所/短所はありますか? 他の解決策はありますか?(OSGi バンドルについては漠然と認識していますが、それらがどのように機能し、長所と短所が何であるかを理解するのは難しいことがわかりました (おそらくそれは短所です)。通常のパッケージに比べて非常に煩わしいようです。開発と展開へ。
注:私は良い答えに賛成票を投じますが、最良の答えは、他の人の長所と短所を包括的に折り畳むものです(盗作!)。
関連する (ただし、重複しないでください!) 質問
「重複の可能性」の叫びを予想して、SOで見つけた同様の質問を次に示します。参考のためにここにそれらを提示し、私の質問に答えない理由を説明します.
- Java : jar ファイル内の単一のパッケージのみを公開する : 方法を尋ねますが、Java の現在のリリースでは不可能であるため、回避策については説明しません。Java 8 での今後のモジュール化 (Project Jigsaw)への興味深い指針があります。
- パッケージと可視性- 基本的に上記の重複した質問。
- 「.internal」パッケージへのアクセスを制御するためのベスト プラクティス- 質問と回答は、OSGi または Eclipse プラグインに固有のようです。
yii - yii-各コントローラーで使用可能な変数
私はyiiを初めて使用します。
Webサイトで複数のコントローラーを使用していますが、各コントローラーのアクションはほとんどありません。
各コントローラーでいくつかの変数を使用したい(変数の値は固定されます。式にはいくつかの定数が必要です)。それらの変数を定義するのに最適な場所(標準的な方法)は何ですか?セッションを使用する必要がありますか?(値は変更されないため)。
java - Java インターフェースの可視性の低下。
重複の可能性:
Java でインターフェースを実装するときに可視性を低下させる
私は明らかな何かを見逃しているに違いありませんが、私は得ています:
継承されたメソッドの可視性を減らすことはできません
そして、私は方法がわかりません。これは私のインターフェースです:
そして、これは私の実装です:
クラスと実装の両方が同じパッケージに含まれています。何か案は?
java - sun.misc* のような制限付きパッケージの作成方法
他のチームが使用するライブラリを開発しています。ライブラリには公開されているクラス/メソッドがいくつかありますが、他の人に使用してほしくありません。
javaのsun.miscパッケージのようなものです。これでは、すべてのクラスが公開されていますが、使用中にコンパイラが「制限エラー」をスローします。
java - javaでパッケージプライベート(明示的な修飾子なし)にするのはいつですか?
クラスのメンバーへのアクセスを制御するチュートリアルを読んでいます。package-private を使用するための適切なユースケースは何か混乱しています。私が理解しているように、いつでもパッケージ宣言をそのようなクラスのパッケージ宣言に変更して、それがパブリッククラスであるかのように振る舞うことができるからです。これが良いことではないことは理解していますが、何が私を止めているのでしょうか?
android - カスタム AsyncTask を使用して、AsyncTask の使用を無効にする
の次の実装がありAsyncTask
、複数AsyncTask
の を同時に実行できます。
通常の混乱や誤った使用を避けるためにAsyncTask
、コードから次へのアクセスをブロックしたいと思います。
AsyncTask
クラスのみを使用するMyAsyncTask
必要があります。- の
execute()
関数MyAsyncTask
。
これを行うことは可能ですか?
c# - パブリッククラス-「保護レベルのためアクセスできません。処理できるのはパブリックタイプのみです。」
オブジェクトのXMLシリアル化について学習するためのテストプロジェクトを実行していますが、奇妙なランタイムエラーが発生します。
クラスは公開されています-このエラーの原因がわかりません。どんな助けでもいただければ幸いです。
windows-runtime - In WinRT, what is the visibility of the default .Ctor?
As an example (and the reason of my question), the class Windows.XAML.Media.Transform, as far as I can see from the WinMD info shown by ILDASM, has no defined constructor.
But if I try to derive from that class, on my C# project, compiler complains that non constructor can be found.
This seems to me that this could be a result of hidden visibility of the constructor.
A same effect can be achieved in C# declaring a private (or internal) Constructor, but it must be declared, otherwise a public constructor is created by the compiler, and the class is indeed derivable.
Any hint?
java - Java と C++ では、クラスはデフォルトでプライベートまたはパブリックですか?
Java と C++ では、クラスはデフォルトでプライベートまたはパブリックですか?