問題タブ [private-constructor]

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 に答える
438 参照

java - プライベート コンストラクターと最終インスタンス変数

final初期化されていない変数とデフォルトのコンストラクターを使用してクラスを作成するとprivate、コンパイラーはfinal変数が初期化されていないことを警告します。コンストラクターが到達不能なコードになっていることを除けば、それはすべてうまくいっています。では、これは Java 作成者の見落としにすぎないのでしょうか、それとも論理的な裏の理由があるのでしょうか? それとも、コンストラクターが到達不能なコードであるという私の仮定は間違っていますか?

0 投票する
0 に答える
426 参照

c++ - std::make_shared およびプライベート コンストラクター

私は関数の(私に言わせてください)コーナーケースに苦労しており、(std::make_sharedそれほど深刻ではない)問題に対する実行可能な代替手段を見つけることができませんでした。

次のコードは正常にコンパイルされます。

これは直感的には、 Aという名前のユーザー定義クラスの一種のファクトリの小さな例です。

のドキュメントを見るとstd::make_shared、次のことがわかります。

この関数は通常、new の呼び出しによって返される生のポインターから共有ポインターの構築 std::shared_ptr(new T(args...)) を置き換えるために使用されます。その式とは対照的に、std::make_shared は通常、T オブジェクトと std::shared_ptr の制御ブロックに単一のメモリ割り当てでメモリを割り当てます (これは標準では拘束力のない要件です)。 new T(args...)) は、少なくとも 2 つのメモリ割り当てを実行します。

非常に興味深いことに、コメント行を直後の行に切り替えると役立つかもしれません。関数の次のコードになりますcreate

残念ながら、このバージョンは、のプライベート コンストラクターが原因でコンパイルされませんA(エラーは のようなものですerror: ‘constexpr A::A()’ is private)。

明確にするために、問題はそれ自体のエラーではありません。何が原因であるかは私には明らかであり、それは理にかなっています。std::make_sharedとにかく、関数を使用し、コンストラクターを同時にプライベートにするための回避策があるかどうかを知りたいです。私が見る限り、最初の例のコードは、用語やパフォーマンスに関してよく知られた (そして文書化された) 欠点があることは言うまでもありませんが、利用可能な唯一の解決策のようです。

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

java - Dozer に影響を与えないプライベート コンストラクター

Dozer を理解するためだけに、PrimaryType と SecondaryType の 2 つのクラスを作成し、Dozer を使用してそれらをマッピングしようとしました。Dozer はそれらをシームレスにマッピングできました。

SecondaryType のコンストラクターを非公開にしようとしましたが、それでも Dozer はタイプ SecondaryType のオブジェクトを作成し、そのフィールドをマップすることができました。Dozer がプライベート コンストラクターを持つクラスをインスタンス化する方法を説明できる人はいますか?

PrimaryType.java

セカンダリ タイプ.java

AppMain.java

出力:

0 投票する
6 に答える
13009 参照

java - JaCoCo と非公開のデフォルト コンストラクターの見逃し

JaCoCoが非公開の空のコンストラクターを Java クラスのカバーされていないコードとして報告しないようにする例を見てみたいと思います。

私が持っているMavenプラグイン構成で

コンストラクターに似たようなものはありませんか?

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

.net - 静的にする代わりに、静的メンバーのみを持つ非静的クラスを持つ理由はありますか?

私は昨日インタビューを受けましたが、質問の 1 つはシングルトンとは何か、それをどのように実装するかというものでした。

MSDN の実装

MSDN のソリューション #1:

私は最も単純な解決策 (msdn の実装からの解決策 1) を提供しましたが、彼はスレッドセーフな解決策 (解決策 3) を望んでいました。

MSDN の解決策 #3:

私が興味をそそられるのは、msdn の例のプライベートコンストラクターです。そんなものがあるとは知りませんでした。

その上でmsdnを見てみましょう

それから私は尋ねます:

クラスを静的にするのではなく、静的メンバーのみを持つクラスがあり、そのインスタンスが作成されないようにして、プライベートコンストラクターを使用したくないのはなぜですか?!

PS .:質問はシングルトンに関するものではありません。静的クラスを使用する代わりに、静的メンバーのみを持つインスタンス化可能なクラスを作成することを選択するシナリオを説明することです (したがって、最終的にはプライベート コンストラクターが必要になります)。

0 投票する
5 に答える
12973 参照

c# - 静的クラス VS プライベート コンストラクター

今日は、静的クラスとプライベート コンストラクターについて読んでいます。

静的クラス - 静的クラスでインスタンスを作成できません。静的クラスを継承することはできません。生成されるインスタンスは 1 つだけです。

プライベート コンストラクター - インスタンスを作成できません。継承することはできません。(インスタンスがいくつ生成されるかはわかりません。)

2 つのコンソール アプリケーションを作成しました。1 つは静的クラス用、もう 1 つはプライベート コンストラクター用です。

静的クラス コード

ここに画像の説明を入力

コンストラクターが1回呼び出されると、単一のオブジェクトが生成されることを理解しました。

プライベート コンストラクター コード

ここに画像の説明を入力

さて、オブジェクトが生成されるかどうかがわかりませんでした。

2つ質問があります。

質問 1. Private コンストラクターと Static クラスの間に特に違いはありませんでした。Private Constructor を使用する必要があるシナリオと、両方を使用できるので Static クラスを使用する必要がある場所を教えてください。

質問 2. プライベート コンストラクターを使用すると、いくつのオブジェクトが生成されますか?

ありがとう。

編集 :

人々は私の質問を理解していなかったと思います。静的コンストラクターは常に最初の参照で 1 回呼び出すことを知っています。静的コンストラクターは、クラスの静的メンバーを初期化するために使用されます。

質問 1. 状況があります。インスタンス化できないクラスを作成する必要があります。これは、静的クラスまたはプライベート コンストラクターのいずれかで行うことができます。だから私の質問は、「両方に違いはありますか? どちらを使用すればよいですか??」

質問 2. プライベート コンストラクターを使用すると、いくつのオブジェクトが作成されますか? 答えが 0 の場合、プライベート コンストラクターのメモリ割り当てが CLR でどのように機能するか。プライベート コンストラクターを使用する場合、メモリ割り当てはありません。

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

java - プライベートコンストラクターを使用した最終クラス、設計原則は何ですか

私は最近、 Netflix オープンソース プロジェクトの 1 つを経験していました。

そこで、最終クラスとプライベートコンストラクターの両方の使用を見つけました。私はそれを十分に認識しています

  1. final は継承を避けることです
  2. private は、インスタンス化を許可しないことです

しかし、なぜ両方が一緒に使用されているのか知りたいだけです。メソッドは静的ですが、インスタンス化せずに使用できますが、その背後にある設計原理を知りたいと思っています。

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

java - AppConfig.javaはプライベートコンストラクターでBeanを返しますか?

AppConfig.javaセキュリティのために注釈スキャンなしで、ハードバインディングのために構成なしで、次のようなSpring Beanのインスタンスをapp-config.xml作成します。

すべてがうまく機能しますが、他の人がのインスタンスを作成できないようにしたい場合はどうすればよいAddressServiceですか? AddressService通常、コンストラクターをプライベートに宣言しますが、コンパイラーは、プライベートコンストラクターにアクセスできないというエラーを表示し AppConfigます!

完全を期すために、これは次のAddressServiceとおりです。

0 投票する
5 に答える
3082 参照

c++ - プライベート コンストラクターがオブジェクトの作成を妨げる理由 C++

私は常にプライベートコンストラクターがオブジェクトの作成を妨げることを読んできました。私はそれらをシングルトンパターンで使用しており、プライベートコンストラクターを使用して(静的メソッドなどを使用して)オブジェクトを作成する方法を知っています。オブジェクトの初期化にコンストラクターが使用されることは知っています。

しかし、プライベートコンストラクターがオブジェクトの作成を妨げている理由が正確にはわかりません。オブジェクトが初期化されない場合はどうなりますか。ガベージをスローする必要があることを意味しますが、なぜ制限するのですか??

stackoverflow で既存の回答をすべて確認しましたが、正確な概念がわかりません。