タグ付けされた質問 「java」

Javaは、元はSun Microsystemsによって開発された、プラットフォームに依存しない高レベルのオブジェクト指向プログラミング言語です。Javaは現在、2010年にSunを購入したOracleが所有しています。

9
変数をnullチェックするよりも優先的にオプションを使用するのはなぜですか?
2つのコード例を取り上げます。 if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } 私の知る限り、最も明らかな違いは、オプションでは追加のオブジェクトを作成する必要があるということです。 ただし、多くの人がオプションを急速に採用し始めています。オプションを使用する場合とnullチェックを使用する場合の利点は何ですか?
25 java  java8 

9
地図で広告掲載順序の問題を伝える方法は?
データベースから一連のタプルを取得して、マップに入れています。データベースクエリは高価です。 マップ内の要素の明らかな自然な順序付けはありませんが、それでも挿入順序は重要です。マップの並べ替えは重い操作になるため、クエリ結果が既に希望どおりに並べ替えられている場合は、それを避ける必要があります。したがって、クエリ結果をに保存LinkedHashMapし、DAOメソッドからマップを返します。 public LinkedHashMap<Key, Value> fetchData() processDataマップ上で何らかの処理を行うメソッドがあります。いくつかの値を変更し、いくつかの新しいキー/値を追加します。次のように定義されます public void processData(LinkedHashMap<Key, Value> data) {...} ただし、いくつかのリンター(ソナーなど)は、「データ」のタイプは「LinkedHashMap」(squid S1319)の実装ではなく、「Map」などのインターフェースであるべきだと文句を言います。 だから基本的には私が持っているべきだと言っている public void processData(Map<Key, Value> data) {...} しかし、メソッドのシグネチャには、マップの順序が重要であると言うようにしたい-それはアルゴリズムにとって重要であるprocessData-したがって、私のメソッドはランダムなマップだけに渡されない。 を使用したくないのはSortedMap、(のjavadocからjava.util.SortedMap)「キーの自然な順序に従って、またはソートされたマップ作成時に通常提供されるComparatorによって順序付けられる」ためです。 私のキーには自然な順序がありません。コンパレータを作成して何もしないのは冗長です。 そして、putキーの重複などを回避するために活用するために、それがマップであることを依然として望んでdataいますList<Map.Entry<Key, Value>>。 それで、私のメソッドはすでにソートされたマップを必要としていると言うにはどうすればいいですか 残念なことに、java.util.LinkedMapインターフェースはありません。そうでなければ、私はそれを使用していました。
24 java  code-quality  map 

5
Javaでは、プライベートヘルパーはパブリックメソッドの上または下に移動する必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 同僚と私は、Javaクラスでのメソッドの順序に関して反対のプラクティスを持っていることに気付きました。私たちの1人は、主要なパブリックメソッドでクラスを開始し、その後、プライベートヘルパーをすべて配置します。もう一方は、パブリックメソッドが最後にあることを確認します。 明らかに、これは単なるスタイルの問題であり、正しい答えはありません。しかし、この問題が単にYooks対Zooksの戦いであり、どちらか一方を勝手に選ぶだけであると判断する前に、おそらく標準Javaスタイルガイドの推奨事項があるのか​​、あるアプローチが他のアプローチより優れている実用的な理由があるのではないかと思っていました。

9
依存性注入:フレームワークを使用する必要がありますか?
私は最近、依存関係の注入を頻繁に行うPythonプロジェクトに取り組みました(アプリをテスト可能にするために必要なため)が、フレームワークは使用しませんでした。すべての依存関係を手動で接続するのは少し面倒ですが、全体的にはうまくいきました。 オブジェクトを複数の場所で作成する必要があった場合、実稼働インスタンスを作成する関数(場合によってはそのオブジェクトのクラスメソッド)が必要でした。この関数は、そのオブジェクトが必要になるたびに呼び出されました。 テストでは、同じことを行いました。オブジェクトの「テストバージョン」を複数回作成する必要がある場合(つまり、モックオブジェクトに裏付けられた実際のインスタンス)、この「テストバージョン」を作成する機能がありました。クラスで、テストで使用されます。 私が言ったように、一般的にこれはうまくいきました。 私は現在、新しいJavaプロジェクトに参加しています。DIフレームワークを使用するか、DIを手動で実行するかを決定しています(前のプロジェクトのように)。 DIフレームワークでの作業がどのように異なり、手動の「バニラ」依存性注入よりも優れているか悪いかを説明してください。 編集:私も質問に追加したいと思います:フレームワークなしで手動でDIを行う「プロレベル」プロジェクトを目撃しましたか?

10
OOPで循環参照が必要と思われるこの実世界のアクティビティをモデル化する適切な方法は何ですか?
私は循環参照に関するJavaプロジェクトの問題に取り組んできました。私は、問題のオブジェクトが相互に依存しており、お互いについて知る必要があると思われる現実の状況をモデル化しようとしています。 このプロジェクトは、ボードゲームをプレイする一般的なモデルです。基本クラスは非特定ですが、チェス、バックギャモン、その他のゲームの特定に対処するために拡張されています。11年前、これを6種類のゲームを備えたアプレットとしてコーディングしましたが、問題は循環参照でいっぱいだということです。当時、私は単一のソースファイルにすべての絡み合ったクラスを詰め込むことでそれを実装しましたが、私はそれがJavaでは悪い形であるという考えを得る。ここで、Androidアプリと同様のものを実装し、適切に処理したいと考えています。 クラスは次のとおりです。 RuleBook:ボードの初期レイアウト、最初に移動した人などのその他の初期ゲームの状態情報、利用可能な移動、提案された移動後のゲームの状態に何が起こるか、などの評価などについて質問できるオブジェクト現在または提案されている取締役会の位置。 ボード:ゲームボードの単純な表現で、移動を反映するように指示できます。 MoveList:Moveのリスト。これは、特定のポイントで利用可能な動きの選択、またはゲーム内で行われた動きのリストの2つの目的です。それは2つのほぼ同一のクラスに分割できますが、それは私が尋ねている質問とは関係がなく、さらに複雑になるかもしれません。 移動:1回の移動。移動に関するすべてが原子のリストとして含まれています。ここからピースを拾い、そこに置き、そこからキャプチャしたピースを削除します。 状態:進行中のゲームの完全な状態情報。ボードの位置だけでなく、MoveList、および現在誰が移動するかなどの他の状態情報。チェスでは、各プレイヤーのキングとルークが移動したかどうかを記録します。 循環参照はたくさんあります。たとえば、RuleBookは特定の時間にどの動きが利用可能かを判断するためにゲームの状態を知る必要がありますが、ゲームの状態は最初の開始レイアウトと1回の動きに伴う副作用についてRuleBookに問い合わせる必要がありますそれが行われます(たとえば、次に移動する人)。 新しいクラスのセットを階層的に整理してみました。RuleBookはすべてを知る必要があるため、最上位にあります。しかし、これにより、多くのメソッドをRuleBookクラスに移動する(移動するなど)必要があり、モノリシックになり、RuleBookがどうあるべきかを特に表しません。 これを整理する適切な方法は何ですか?RuleBookをBigClassThatDoesAlmostEverythingInTheGameに変換して、循環参照を回避し、実際のゲームを正確にモデル化する試みを放棄する必要がありますか?または、相互に依存するクラスに固執し、コンパイラーに何らかの方法でそれらをコンパイルさせ、実世界のモデルを保持する必要がありますか?または、私が欠落している明らかな有効な構造がありますか? あなたが与えることができる助けをありがとう!

6
javaがビルド言語として使用されないのはなぜですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 Javaが汎用言語であり、プログラムの構築がJava言語を使用して記述できるものである場合、なぜこれがビルドファイルを記述する最良の方法ではないのか、代わりにAnt、Maven、Gradleなどのツールを使用しますか?それはもっと簡単なことではなく、また別のプログラミング言語を学ぶ必要性を排除しませんか?(ところで-この質問は、C#などの他の言語にも適用できます)
24 java  c#  builds  build-system 

6
LMAXのチームがなぜJavaを使用し、GCを避けるためにアーキテクチャを設計したのですか?
LMAXのチームがJavaでLMAX Disruptorを設計したのに、GCの使用を最小限に抑えることがすべての設計ポイントであるのはなぜですか?GCを実行したくない場合、ガベージコレクションされた言語を使用するのはなぜですか? 彼らの最適化、ハードウェアの知識のレベル、そして彼らが置いた思考はただ素晴らしいですが、なぜJavaなのでしょうか? 私はJavaなどに反対ではありませんが、なぜGC言語なのですか?DのようなものやGCを使用しない他の言語を使用して、効率的なコードを使用できるのはなぜですか?チームはJavaに最も精通しているのでしょうか、それともJavaには私には見られない独自の利点がありますか? 手動のメモリ管理でDを使用して開発するとしますが、違いは何でしょうか?低レベル(既にある)を考える必要がありますが、システムがネイティブであるため、システムから最高のパフォーマンスを引き出すことができます。

3
静的ファクトリーとシングルトンとしてのファクトリー
私のコードのいくつかでは、次のような静的ファクトリーがあります。 public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } コードのレビュー中に、これはシングルトンであることが提案され、注入されました。したがって、次のようになります。 public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } 強調すべきいくつかのこと: 両方の工場はステートレスです。 メソッド間の唯一の違いは、スコープ(インスタンスと静的)です。実装は同じです。 Fooは、インターフェースを持たないBeanです。 静的にするための引数は次のとおりです。 クラスはステートレスであるため、インスタンス化する必要はありません ファクトリをインスタンス化するよりも静的メソッドを呼び出す方が自然なようです シングルトンとしてのファクトリの引数は次のとおりです。 すべてを注入するのが良い 工場の無国籍にもかかわらず、注入によりテストが簡単になります(簡単にモックできます) 消費者をテストするとき、それはock笑されるべきです …

5
アプリケーション設定を読み込む最良の方法
Javaアプリケーションの設定を保持する簡単な方法は、特定の値(この値は数字、文字列、日付など)に関連付けられた各設定の識別子を含む「.properties」拡張子を持つテキストファイルで表されます。 。C#は同様のアプローチを使用しますが、テキストファイルには「App.config」という名前を付ける必要があります。どちらの場合も、ソースコードでは、設定を読み取るために特定のクラスを初期化する必要があります。このクラスには、指定された設定識別子に関連付けられた値を(文字列として)返すメソッドがあります。 // Java example Properties config = new Properties(); config.load(...); String valueStr = config.getProperty("listening-port"); // ... // C# example NameValueCollection setting = ConfigurationManager.AppSettings; string valueStr = setting["listening-port"]; // ... どちらの場合も、構成ファイルから読み込まれた文字列を解析し、変換された値を関連する型付きオブジェクトに割り当てる必要があります(この段階で解析エラーが発生する可能性があります)。解析ステップの後、設定値が特定の有効領域に属していることを確認する必要があります。たとえば、キュ​​ーの最大サイズは正の値である必要があり、いくつかの値は関連している場合があります(例:min <max )、 等々。 アプリケーションが起動するとすぐに設定をロードする必要があると仮定します。つまり、アプリケーションによって実行される最初の操作は設定をロードすることです。設定の無効な値は、自動的にデフォルト値に置き換えられる必要があります:これが関連する設定のグループに発生した場合、それらの設定はすべてデフォルト値で設定されます。 これらの操作を実行する最も簡単な方法は、最初にすべての設定を解析し、次に読み込まれた値をチェックし、最後にデフォルト値を設定するメソッドを作成することです。ただし、このアプローチを使用する場合、メンテナンスは困難です。アプリケーションの開発中に設定の数が増えると、コードの更新がますます難しくなります。 この問題を解決するために、次のようにTemplate Methodパターンを使用することを考えていました。 public abstract class Setting { protected abstract bool TryParseValues(); protected abstract bool …

5
Java instanceof演算子はリフレクションと見なされますか?
Java演算子を使用することinstanceofは一種の反省かどうか、今日同僚と話し合いました。そして、議論はすぐに実際に反射を定義するものに進化しました。 だから、反射の定義は何ですか? そして、instanceof考慮された「反射を使用する」の使用法はありますか? さらに、instanceof反射と見なされる場合、多型も「反射を使用する」わけではありませんか?そうでない場合、違いは何ですか?

7
Pythonの生産性とJavaの生産性
SOで、Google AppEngineでの開発に最適なプラットフォームは、JavaとPythonのどちらであるかという質問に出会いました。多くの人々は、Python over Javaを使用することで得られる生産性の向上を誇っていました。PythonとJavaの生産性の議論について私が言うことの1つは、Javaには開発をスピードアップする優れたIDEがあります。 そのため、言語としてPythonを使用することを好みますが、特に新しいフレームワークを使用する場合、Javaと比較して生産性が大幅に向上するとは考えていません。明らかにJava対Pythonであり、使用できる唯一のエディターがVIMである場合、Pythonは生産性を大幅に向上させますが、IDEが方程式に組み込まれると、それほど明確ではありません。 Javaのメリットは言語レベルでのみ評価される場合が多く、多くの場合、時代遅れの前提条件で評価されますが、Javaには、JVM(多くの場合批判されますが大きな可能性を提供します)、優れたIDEとツール、膨大な数のサードパーティライブラリ、プラットフォームなど。 質問、Python /関連の動的言語は、しばしば話題になっている生産性を大幅に向上させますか?(新しいフレームワークの使用と中規模から大規模のアプリケーションでの作業を考慮して)。

1
キャッチされない例外の後、Javaが成功して終了するのはなぜですか?
Perl、Python、C ++、またはTclプログラムが未処理の例外で停止するたびに、これらの言語ランタイムはプロセスにゼロ以外の終了コードを登録するように注意します。Eclipseベースのプログラムでさえ、起動中に失敗すると1を返します。java.exeしかし、標準で実行されるプログラムは、プログラムがSystem.exit()終了値で呼び出されない限り、どんなに突然終了しても喜んでゼロを返します。でもAssertionFailedErrorまたはがUnsatisfiedLinkError成功して終了として呼び出し元のプログラムに戻って報告されています。 もちろん、すべてのシステムにプログラムのリターンコードがあるわけではありませんが、UnixとWindowsはjava.lang.Process.exitValue()、子プロセスを保証するのに十分なほど重要でした。親プロセスの規約を順守することも保証されませんか? これは言語設計の欠陥ですか、それとも実装の欠陥ですか?それは良いアイデアだという議論はありますか?
24 java  exceptions 

4
開発者が絶対に知っておくべきアルゴリズムとデータ構造はどれですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 成功するエンタープライズJava開発者になりたい。どのアルゴリズムとデータ構造をよく理解する必要がありますか?どの本を勧めますか? Java開発者として成功するには、CLRSで提供されているような高度なアルゴリズムをすべて知っている必要がありますか? 優先度の高い順に学習する必要があるトピックのリストを提案できますか? 私が知っている必要があります: 検索中? 仕分け? グラフ/ツリー? 等?

2
ビルダーが独自のクラスファイルではなく内部クラスである必要があるのはなぜですか?
多くのBuilder Pattern例では、Builderビルドするオブジェクトの内部クラスを作成しています。 これは、Builderビルドの内容を示すため、ある程度意味があります。ただし、静的に型付けされた言語では、Builderビルドの内容がわかります。 一方、Builderが内部クラスである場合、の内部を見ずにビルドするクラスを知る必要BuilderがありBuilderます。 また、ビルダーを内部クラスとして使用すると、外部クラスから参照できるため、インポートの数が減ります(気になる場合)。 そして、がBuilder同じパッケージ内にあるが、のような内部クラスではない実用的な例がありStringBuilderます。あなたはそれがそう名付けられているので、構築するBuilder 必要があることを知っていStringます。 そうは言ってもBuilder、内部クラスを作成する理由として考えられる唯一の正当な理由は、クラスのBuilder名前を知らず、命名規則に依存せずにクラスが何であるかを知っているということです。たとえば、もし私がStringBuilder内部クラスだったStringとしたら、おそらく私がそれよりも早く存在したことを知っていただろう(投機的) Builder内なるクラスにする他の理由はありますか、それとも単に好みと儀式に帰着しますか?

6
一度だけ使用する場合、文字列定数を定義する必要がありますか?
Xaxを使用してアプリケーションのデータモデルにアクセスできるようにするJaxen(JavaのXPathライブラリ)のアダプターを実装しています。 これは、文字列(Jaxenから渡された)をデータモデルの要素にマップするクラスを実装することによって行われます。合計で1000以上の文字列比較を行う約100のクラスが必要になると推定されます。 これを行う最良の方法は、各文字列を定数として定義するのではなく、コードに直接書き込まれた文字列を使用したif / elseステートメントを単純にすることだと思います。例えば: public Object getNode(String name) { if ("name".equals(name)) { return contact.getFullName(); } else if ("title".equals(name)) { return contact.getTitle(); } else if ("first_name".equals(name)) { return contact.getFirstName(); } else if ("last_name".equals(name)) { return contact.getLastName(); ... ただし、文字列値をコードに直接埋め込むのではなく、文字列定数を作成することを常に教えられました。これは次のようになります。 private static final String NAME = "name"; private static final String TITLE …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.