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

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

5
どのレイヤーに検証を配置する必要がありますか?
Spring Bootを使用してRest APIを作成し、Hibernate Validationを使用してリクエスト入力を検証しています。 しかし、他の種類の検証も必要です。たとえば、更新データを確認する必要がある場合、会社IDが存在しない場合は、カスタム例外をスローする必要があります。 この検証は、サービス層またはコントローラー層に配置する必要がありますか? サービス層: public Company update(Company entity) { if (entity.getId() == null || repository.findOne(entity.getId()) == null) { throw new ResourceNotFoundException("can not update un existence data with id : " + entity.getId()); } return repository.saveAndFlush(entity); } コントローラー層: public HttpEntity<CompanyResource> update(@Valid @RequestBody Company companyRequest) { Company company = …

1
例外メッセージをログに記録して別の例外をスローする場合、それはまだアンチパターンですか?
私たちのウェブアプリケーションはを使用しExceptionMapperていくつかの例外をにマップしていますResponse。次のように、新しい例外をスローする前に例外メッセージを記録します。 catch (SomeException ex) { LOG.error(ex.getMessage()); throw new MyException(ex.getMessage()); } 私たちは同じ例外を再スローしていないので、私の質問は、これがLog and Throwアンチパターンと見なされるかどうかです。したがって、同様の場所でロギングを削除し、ExceptionMapper次のようにいくつかのクラスに移動する方が良いでしょう: @Provider public class MyExceptionMapper implements ExceptionMapper<MyException> { // bla bla @Override public Response toResponse(final MyException ex) { LOG.error(ex.getMessage()); return Response.status(400).entity("something").build(); } }

5
Java Webアプリケーションのフォルダー構造
J2EEの初心者として、最近、Core of J2EE:Servlets&Jspsを使用して、ゼロから独自のプロジェクトの開発を開始しました。 プロジェクトのフォルダー構造が正しいかどうかを評価できませんでした。これが私のプロジェクトのフォルダ構造です。 質問をする前に、誰かが私に尋ねたとしても、なぜこのタイプのフォルダー構造なのか、答えることも正当化することもできません。質問:jspをweb-infの外に置くのは良い兆候ですか?そうでない場合、なぜそうなのですか?はいの場合、なぜですか? J2EE Webアプリケーション用の標準的なフォルダー構造の規則はありますか、mavenがいくつかの標準を導入したことは知っていますが、それでも、要件に応じてカスタマイズできます。 私は少しグーグルをして、2つの参照を見つけました 1 2 答えが同じページになく、そこから結論を引き出すことはできませんでした。 J2EE Webアプリケーションのフォルダ構造をレイアウトする際に考慮すべき点は何ですか、重要なことは、JSP、静的コンテンツをどこに入れるべきか、そしてなぜですか?

5
多くのJVM言語をサポートするために、JVMが非常に多用途なのはなぜですか?
以下のようなJava以外の多くの言語ので、JVMがサポートGroovy,Clojure,ScalaするJavaとは異なり、関数型言語ですなど(私が言及していますバージョン8以前のJavaLambda'sそれほど多彩な機能capabilities.OnにJVMを作るもの高いレベルをサポートしていませんサポートされていません)オブジェクト指向言語と関数型言語の両方をサポートできますか?

5
状態のないインスタンス化可能なクラスが非常に多いのはなぜですか?
C ++とJavaの世界には、状態のないインスタンス化可能なクラスがたくさんあります。 私は本当に人々がそれをする理由を理解することはできません。C++の無料の関数で名前空間を使用するか、Javaのプライベートコンストラクタと静的メソッドのみを持つクラスを使用できます。 私が考えることができる唯一の利点は、後で特定の状況で異なる実装が必要だと判断した場合、ほとんどのコードを変更する必要がないことです。しかし、それは時期尚早な設計の場合ではありませんか?それが適切になった場合に/後でクラスに変えることができます。 これは間違っていますか?すべてをオブジェクト(つまり、インスタンス化されたクラス)に入れないと、OOPになりませんか?それでは、なぜC ++とJavaの標準ライブラリに非常に多くのユーティリティ名前空間とクラスがあるのですか? 更新: これまでの仕事で確かに多くの例を見てきましたが、オープンソースの例を見つけるのに苦労しています。それでも、私は人々がなぜそれをするのか、それがどれほど一般的であるのか疑問に思っています。

11
System.out.println()の使用がそれほど悪いのはなぜですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 もちろん、エラーメッセージまたは警告にログフレームワークを使用することは非常に有効です。ただし、短時間で新しいことを試してみたい場合は、System.out.println()を使用することがあります。 System.out.println()を使って簡単なテストを行うのは本当に悪いのでしょうか?

5
DelayQueueの実際の使用法[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 DelayQueueの実際の使用法は何ですか?解決するために設計された一般的な問題は何ですか?

2
Spring構成ファイルを配置する場所
プロジェクトのSpringフレームワークを特にサーバーサイドに統合したい。 そのため、warファイルのWEB-INFフォルダーに入れたくありません。 applicationContext.xmlを各レイヤーに配置する必要があります(個別のプロジェクトに分割されているため、各プロジェクトを意味しますか?(サービス、ドメイン、およびDAO) 良い習慣は何ですか?
18 java  soa  spring 

8
文字列との結合はクラスメソッドよりも「緩い」のでしょうか?
Swingを使用して、Javaで学校グループプロジェクトを始めています。これは、データベースデスクトップアプリの簡単なGUIです。 教授は去年のプロジェクトのコードを教えてくれたので、彼がどのように仕事をしているかを見ることができました。私の最初の印象は、コードが本来あるべきよりもはるかに複雑であるということですが、プログラマーは、自分が書いただけではないコードを見るとき、これをよく考えると思います。 私は彼のシステムが良いか悪いかの理由を見つけたいと思っています。(私は教授に尋ねたが、彼は後でなぜそれが良いのかを見るだろうと言ったが、それは私を満足させない。) 基本的に、彼の永続可能なオブジェクト、モデル(ビジネスロジック)、およびビュー間のカップリングを避けるために、すべては文字列で行われます。データベースに格納される永続オブジェクトは文字列のハッシュテーブルであり、モデルとビューは互いにサブスクライブし、サブスクライブする「イベント」に文字列キーを提供します。 イベントがトリガーされると、ビューまたはモデルは、そのイベントの処理を決定するすべてのサブスクライバーに文字列を送信します。たとえば、ビューアクションリスナメソッドの1つ(これは永続オブジェクトにbicycleMakeFieldを設定するだけだと思います): else if(evt.getSource() == bicycleMakeField) { myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText()); } その呼び出しは、最終的にVehicleモデルのこのメソッドに到達します。 public void stateChangeRequest(String key, Object value) { ... bunch of else ifs ... else if (key.equals("BicycleMake") == true) { ... do stuff ... 教授は、このような方法は、ビューでビジネスロジックオブジェクトのメソッドを単純に呼び出すよりも、拡張性と保守性が高いと言います。彼は、ビューとモデルがお互いの存在を知らないので、ビューとモデルの間に結合がないと言います。 ビューとモデルが機能するには同じ文字列を使用する必要があるため、これはより悪い種類のカップリングだと思います。ビューまたはモデルを削除するか、文字列にタイプミスをすると、コンパイルエラーは発生しません。また、コードが必要以上に長くなります。 私は彼とこれについて議論したいが、彼は彼の業界経験を使って、私、経験の浅い学生がするかもしれない議論に反論する。私が見逃している彼のアプローチにはいくつかの利点がありますか? 明確にするために、ビューをモデルに明らかに結合させることで、上記のアプローチを比較したいと思います。たとえば、車両モデルオブジェクトをビューに渡し、車両の「メイク」を変更するには、次のようにします。 vehicle.make = bicycleMakeField.getText(); これにより、車両のメーカーを1か所で設定するために現在使用されている15行のコードが、読み取り可能な1行のコードに削減されます。(そして、この種の操作はアプリ全体で何百回も行われるため、読みやすさと安全性にとって大きな勝利になると思います。) 更新 私のチームリーダーと私は、静的型付けを使用してフレームワークを望みどおりに再構築し、教授に通知し、最終的に彼にデモを提供しました。彼は私たちに助けを求めない限り、そして私たちのチームの残りの部分を最新に保つことができる限り、私たちのフレームワークを使用するのに十分寛大です-これは私たちにとって公平に思えます。
18 java  coupling 

6
自己文書化コードvs Javadocs?
最近、私が現在扱っているコードベースの部分のリファクタリングに取り組んでいます-自分自身をよりよく理解するためだけでなく、コードに取り組んでいる他の人にとってそれをより簡単にするために。 私は、自己文書化コードは素晴らしいと考える側に傾く傾向があります。私はちょうどそれがきれいだと思うし、コードがそれ自体のために話すなら、まあ... それは素晴らしいです。 一方、javadocsなどのドキュメントがあります。私もこれが好きですが、ここのコメントが時代遅れになるという特定のリスクがあります(もちろん一般的なコメントも同様です)。ただし、それらが最新の場合、複雑なアルゴリズムを理解するなど、非常に役立ちます。 これのベストプラクティスは何ですか?自己文書化コードとjavadocsの間のどこに線を引きますか?

6
JavaがC ++のようにヘッダーの使用を許可しない理由
要件を満たさない次の回答を除いて、回答が見つからなかったという質問があります。 「ジェームズゴスリングはしたくなかったから」 Javaにはインターフェース(純粋な仮想関数のみ、属性なし)を含めることができますが、クラス定義とまったく同じではありません。
18 java 

2
コールバックとリスナーの違いは何ですか?
blackberryでは、keyChar()メソッドをオーバーライドしてkeypressイベントをキャプチャするか、onKeyPressListenerを登録できます。onKeyListenerはオブザーバーパターンです。 アンドロイドにもKeyEvent.callbackとonKeyListenerがあります どちらもkeyCharイベントに登録する必要がないイベントです。両方のパターンの違いは何ですか?
18 java 

10
なぜ継承とポリモーフィズムがそれほど広く使用されているのですか?
関数型プログラミングなどのさまざまなプログラミングパラダイムについて学べば学ぶほど、継承やポリモーフィズムなどのOOPコンセプトの知恵に疑問を持ち始めます。私は最初に学校での継承とポリモーフィズムについて学びましたが、当時、ポリモーフィズムは簡単な拡張性を可能にする汎用コードを書く素晴らしい方法のように思えました。 しかし、カモタイピング(動的および静的の両方)および高次関数などの機能的特徴に直面して、継承とポリモーフィズムを、オブジェクト間の脆弱な一連の関係に基づいて不必要な制限を課すように見始めました。多態性の背後にある一般的な考え方は、関数を一度書くだけで、後で元の関数を変更せずにプログラムに新しい機能を追加できるということです。必要なメソッドを実装する別の派生クラスを作成するだけです。 しかし、これは、Pythonのような動的言語であろうと、C ++のような静的言語であろうと、アヒルの型付けによって達成するのがはるかに簡単です。 例として、次のPython関数とそれに続く静的なC ++の機能を考えてみましょう。 def foo(obj): obj.doSomething() template <class Obj> void foo(Obj& obj) { obj.doSomething(); } OOPに相当するものは、次のJavaコードのようなものです。 public void foo(DoSomethingable obj) { obj.doSomething(); } もちろん、大きな違いは、Javaバージョンが機能する前に、インターフェイスまたは継承階層を作成する必要があることです。したがって、Javaバージョンはより多くの作業を必要とし、柔軟性が低くなります。さらに、ほとんどの実際の継承階層はやや不安定であることがわかりました。シェイプとアニマルの不自然な例を見てきましたが、現実の世界では、ビジネス要件の変更と新しい機能の追加に伴い、「is-a」関係を実際に伸ばす前に作業を完了することは困難です。サブクラス、または階層をリモデリング/リファクタリングして、新しい要件に対応するために、さらに基本クラスまたはインターフェイスを追加します。アヒルのタイピングでは、モデリングのことを心配する必要はありません- 必要な機能を心配するだけです。 しかし、継承とポリモーフィズムは非常に人気があるため、拡張性とコードの再利用のための支配的な戦略と呼ぶのは誇張ではないでしょうか。それでは、なぜ継承とポリモーフィズムはそれほど成功しているのでしょうか?継承/ポリモーフィズムがアヒルのタイピングよりも優れているいくつかの重大な利点を見落としていますか?

2
Java AOTコンパイラはどのように機能しますか?
Javaアプリをネイティブ実行可能ファイルに変換することを主張するツール(Excelsior JETなど)がいくつかあります(*.exe)。ただし、これらのツールは実際にはシェルまたはコマンドラインから起動/実行するネイティブラッパーを作成しているにすぎないことを理解していますjava。 その理解が間違っている場合、それがどうなるかわかりません。実行中のJVM(javaプロセス)が本質的に高性能インタープリターであり、Javaクラスファイルからバイトコードをオンザフライでロードする場合、Javaアプリ(JVMへの入力として機能するバイトコードファイルのコレクション)がどのようになるかわかりません本当に実行可能ファイルに変換されます。 これは、JVMプロセスがすでにバイトコードファイルのセットを入力として受け取るネイティブ実行可能ファイルであるためです。これらのバイトコードファイルとJVMプロセスを単一の統合されたネイティブ実行可能ファイルにマージすることは、JVMを完全に書き直し、JVM仕様から脱線しなければ不可能だと思われます。 だから私は尋ねる:これらのツールは実際に Javaクラスファイルをネイティブの実行可能ファイルにどのように「変換」するのか?
18 java  compiler  aot 

1
Jester for Javaのような突然変異テストツールの最新の代替品はありますか?
「確かにわかるのに、なぜあなたのテストは良いと思うのですか?Jesterは私のテストが気密であると言うこともありますが、見つかった変更が突然発生することもあります。強くお勧めします。」-ケントベック しかし、stackoverflowには「Jester」というタグすらありません。では、Jesterの最新の代替品はありますか?CoberturaやCloverなどのツールのコードカバレッジから統計を見つけること以外に、記述された単体テストが堅実であることをどのように確認できますか?

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