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

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


3
peek()を使用してストリーム要素を変更するのはアンチパターンですか?
モノのストリームがあり、それらを途中で「強化」したい場合peek()、これを行うために使用できます。たとえば: streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); コードのこの時点でthingMutatorモノを変更することは正しい動作であると仮定します。たとえば、メソッドは「lastProcessed」フィールドを現在の時間に設定できます。 ただし、peek()ほとんどのコンテキストでは、「見て、触れないでください」という意味です。 ストリーム要素の突然変異にアンチパターンを使用peek()していますか? 編集: より一般的な代替アプローチは、消費者を変換することです。 private void thingMutator(Thing thing) { thing.setLastProcessed(System.currentTimeMillis()); } パラメータを返す関数に: private Thing thingMutator(Thing thing) { thing.setLastProcessed(currentTimeMillis()); return thing; } map()代わりに使用します: stream.map(this::thingMutator)... しかし、それは機能的なコード(return)を導入しpeek()、同じオブジェクトを返すことを知っているので、それがより明確であるとは確信していませんがmap()、同じクラスのオブジェクトであることは一目でさえわかりません。 さらに、peek()あなたは突然変異するラムダを持つことができmap()ますが、列車の残骸を構築する必要があります。比較する: stream.peek(t -> t.setLastProcessed(currentTimeMillis())).forEach(...) stream.map(t -> {t.setLastProcessed(currentTimeMillis()); return t;}).forEach(...) 私は思うpeek()ので、何の「神秘的」副作用はありません、バージョンが明確で、かつラムダは明らかに変異されます。同様に、メソッド参照が使用され、メソッドの名前が明らかに突然変異を暗示している場合、それも明確で明白です。 個人的には、peek()突然変異に使うことをためらわない-非常に便利だと思う。

9
なぜ学校はリストよりも配列を教えるのですか?[閉まっている]
私の学校での最初のプログラミングクラスの割り当てのほとんどでは、配列を使用する必要がありました。私は今フルタイムで働いており、私が取り組んだプロジェクトでアレイを使用したことはありません。既存のプロジェクトでさえ、どこでも配列の使用を見たことはありません。私の意見では、リストは使いやすく標準です。教授が課題でアレイを使用するよう生徒に指示するのはなぜですか?学生が基本を理解するためだけですか? ほとんどの大学がJavaを教えているため、この質問はJavaに固有のものです。

5
Java Swingクラスをいつ拡張する必要がありますか?
継承の実装に関する私の現在の理解では、IS-A関係が存在する場合にのみクラスを拡張する必要があります。親クラスがさらに異なる機能を持つより具体的な子タイプを持つことができるが、親で抽象化された共通要素を共有する場合。 私のJava教授が私たちにすべきだと勧めていることのために、私はその理解に疑問を抱いています。彼は、JSwing私たちがクラスで構築しているアプリケーションのために 一つは、すべての拡張する必要がありますJSwingクラス(JFrame、JButton、JTextBox(部品サイズ、部品ラベルなどのような)別のカスタムクラスに、など)と、それらに関連するGUIカスタマイズを指定します これまでのところこれでいいのですが、彼はさらに、すべてのJButtonが独自のカスタム拡張クラスを持つべきであり、唯一の識別要素はラベルであるとアドバイスしています。 たとえば、GUIに2つのボタンOkayとCancelがある場合。彼は、以下のように拡張することを推奨しています。 class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } ご覧のとおり、唯一の違いはsetText機能にあります。 それでは、この標準的な慣習はありますか? ところで、これが議論されたコースは、Javaのベストプログラミングプラクティスと呼ばれています [教授からの返信] そこで私は教授と問題について話し合い、答えに挙げられているすべての点を挙げました。 彼の正当性は、サブクラス化がGUI設計標準に従って再利用可能なコードを提供することです。たとえば、開発者が1つのウィンドウでカスタムボタンOkayとCancelボタンを使用している場合、同じボタンを他のウィンドウにも配置する方が簡単です。 理由はわかりますが、それでも継承を利用してコードを脆弱にしているだけです。 後で、開発者はボタンを誤って呼び出して変更setTextする可能性がありOkayます。その場合、サブクラスは単に迷惑になります。

9
アルゴリズムはプログラミング言語よりも重要ですか?
現在(2013年)のGoogle Code Jamコンテストでは、40行のコードのみを使用して同じ問題を解決したPythonの人々と比較して、C ++およびJavaの人々が200行以上のコードを必要とする問題がありました。 PythonはC ++やJavaと直接比較することはできませんが、冗長性の違いはおそらくアルゴリズムの効率に影響を与えると考えられます。 言語の選択と比較して、適切なアルゴリズムを知ることはどれほど重要ですか?優れた実装のPythonプログラムを(同じアルゴリズムを使用して)より良い方法でC ++またはJavaで実装でき、これは特定のプログラミング言語の自然な冗長性と関係がありますか?
35 java  c++  algorithms  python 

2
新しいプロジェクト用のJAX-RS実装の選択
RESTful APIを必要とする新しいJavaプロジェクトを開始しています。モバイルクライアントにサービスを提供するSaaSビジネスアプリケーションになります。 Java EE 6を使用して1つのプロジェクトを開発しましたが、ほとんどの経験がMicrosoftプラットフォームに関するものであるため、エコシステムについてあまり詳しくありません。 記載されているような新しいプロジェクトのJAX-RS実装の賢明な選択はどれでしょうか? ウィキペディアのリストから判断すると、主な候補者はジャージー、Apache CXF、RESTeasy、Restletのようです。しかし、Wikipediaで引用されているJAX-RS実装の比較は 2008年のものです。 それぞれのホームページから私の最初の印象は次のとおりです。 CXFは非常に包括的なソリューションを目指しています(Microsoft分野のWCFを思い出させます)。これは、必要なものよりも理解、セットアップ、デバッグが複雑になると思います。 Jerseyはリファレンス実装であり、良い選択かもしれませんが、Sunの遺産であり、Oracleがそれをどのように扱っているのかわかりません(アナウンスページが機能せず、最後のコミット通知が4か月前のものです)。 RESTeasyはJBossからのもので、おそらく堅実なオプションですが、学習曲線についてはわかりません。 Restletは人気があるように見えますが、多くの歴史があります。JavaEE 6の世界でどの程度最新であるか、または(多くのXML構成のように)重いJ2EEの考え方を持っているかどうかはわかりません。 これらの各選択肢のメリットは何でしょうか?学習曲線はどうですか?機能サポート?ツール(例:NetBeansまたはEclipseウィザード)?デバッグと展開の容易さについてはどうですか?これらのプロジェクトのうち、他のものよりも最新のものはありますか?それらはどれくらい安定していますか?
35 java  rest  java-ee 

3
オブジェクト指向で渡すメッセージとは何ですか?
私は、主にC ++、C#、およびJavaでオブジェクト指向プログラミングを研究しています。カプセル化、継承、およびポリモーフィズムの理解(およびこのサイトで多くの質問を読むこと)で、それを十分に把握していると思いました。 ここにポップアップ表示されるように思われることの1つは、「メッセージパッシング」の概念です。どうやら、これは今日の主流言語でのオブジェクト指向プログラミングでは使用されていないが、Smalltalkでサポートされているものです。 私の質問は: メッセージパッシングとは何ですか?(誰かが実用的な例を挙げることができますか?) C ++、C#、またはJavaでこの「メッセージパッシング」をサポートしていますか?
35 java  c#  c++  object-oriented 

5
スローされないチェック例外を処理する方法
例: foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); エンコーディングはハードコーディングされており、正しいため、コンストラクターは仕様で宣言されたUnsupportedEncodingExceptionをスローしません(Java実装が壊れていない限り、この場合はとにかく失われます)。とにかく、Javaはとにかくその例外に対処することを強制します。 現在、そのように見えます try { foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); } catch(UnsupportedEncodingException e) { /* won't ever happen */ } それを改善する方法はありますか?


8
他の開発者に作業の完了後にメソッドを呼び出すように強制する
Java 7のライブラリには、他のクラスにサービスを提供するクラスがあります。このサービスクラスのインスタンスを作成した後、その1つのメソッドを複数回呼び出すことができます(doWork()メソッドと呼びましょう)。したがって、サービスクラスの作業がいつ完了するかはわかりません。 問題は、サービスクラスが重いオブジェクトを使用し、それらを解放する必要があることです。この部分をメソッドに設定します(呼び出しましょうrelease())が、他の開発者がこのメソッドを使用することは保証されません。 サービスクラスのタスクを完了した後、他の開発者にこのメソッドを強制的に呼び出す方法はありますか?もちろんそれを文書化することはできますが、私はそれらを強制したいと思います。 注:release()メソッドでメソッドを呼び出すことはできません 。これは、次に呼び出されるときにこれらのオブジェクトが必要doWork()になるためdoWork()です。
34 java 

6
2つのキューを使用してスタックを実装する意味は何ですか?
次の宿題の質問があります。 2つのキューを使用して、スタックメソッドpush(x)およびpop()を実装します。 これは私には奇妙に思えます: スタックは(LIFO)キューです 実装に2つのキューが必要な理由がわかりません 私は周りを検索しました: GeeksForGeeks スタックオーバーフロー そして、いくつかの解決策を見つけました。これが私がやったことです: public class Stack<T> { LinkedList<T> q1 = new LinkedList<T>(); LinkedList<T> q2 = new LinkedList<T>(); public void push(T t) { q1.addFirst(t); } public T pop() { if (q1.isEmpty()) { throw new RuntimeException( "Can't pop from an empty stack!"); } while(q1.size() > 1) …
34 java  stack 

8
Object.finalize()のオーバーライドは本当に悪いですか?
オーバーライドに対する主な2つの引数Object.finalize()は次のとおりです。 いつ呼び出されるかを決めることはできません。 まったく呼び出されない場合があります。 私がこれを正しく理解していれば、Object.finalize()それがそんなに嫌いな十分な理由だとは思いません。 オブジェクトの割り当てを解除する適切なタイミングは開発者ではなく、VM実装とGCが決定します。いつObject.finalize()呼び出されるかを決めることが重要なのはなぜですか? 通常、私が間違っている場合は修正Object.finalize()しますが、GCが実行される前にアプリケーションが終了したときのみ呼び出されません。ただし、アプリケーションのプロセスが終了すると、オブジェクトは解放されます。だから、Object.finalize()それが呼び出される必要はなかったので、呼び出されませんでした。開発者が気にするのはなぜですか? 手動で閉じる必要のあるオブジェクト(ファイルハンドルや接続など)を使用するたびに、非常にイライラします。オブジェクトにの実装があるかどうかを常に確認する必要がありclose()、過去のある時点でいくつかの呼び出しを逃したと確信しています。close()実装を入れることでこれらのオブジェクトを破棄するためにVMとGCに任せる方が単純で安全ではないのはなぜObject.finalize()ですか?

3
通常、Java開発にはC#/。NETよりも多くのサブクラスが含まれますか?
最近、Androidの開発を検討し始めました。これにより、私はJavaソフトウェア開発の世界に戻ってきました。私が最後にJavaで作業したときは、OOPを(私が思うに)今ほど理解していないことを認めます。 私のキャリアでは主にC#を使用していましたが、継承がJavaとC#を使用する方法に驚くべき違いがあることに気付きました。 C#では、ほとんどの状況で継承を回避できるように思われました。通常、当面のタスクは、.NETフレームワークの具体的なクラスを使用して実現できます。 Javaでは、コードサンプルから収集したものから、Javaフレームワークは多くのインターフェイスまたは抽象クラスを提供し、開発者が実装/拡張することを意図しているようです。 これは、スタイルにまで煮詰めるには大きすぎる違いのようです。この背後にある理由は何ですか?これを理解するまで、きれいなJavaコードを書くことはできないと思います。 また、これはAndroid SDKだけに限定されていますか?これはOOPに対するJava全体のアプローチですか? または別の言い方をすれば、 これら2つの言語の設計について、他の言語よりも多かれ少なかれ継承を使用しているように思われますか? 言語が継承を同一に扱い、私の観察が有効であると仮定すると、これは言語ではなくフレームワーク/ライブラリの設計に関連することを意味します。この種のデザインの動機は何でしょうか?

2
高度に拡張可能なクラスでの使用により適したBlochのBuilderパターンを改善する方法
Joshua BlochのEffective Javaの本(第2版)に大きな影響を受けました。おそらく私が読んだどのプログラミングの本よりもそうでしょう。特に、彼のビルダーパターン(項目2)が最大の効果をもたらしました。 Blochのビルダーは、過去10年間のプログラミングよりも数か月ではるかに遠くまで私を導いてくれましたが、私は今でも同じ壁にぶつかっています。 --especiallyジェネリックが遊びに来たときに、そして特にと自己参照ジェネリック医薬品(などComparable<T extends Comparable<T>>)。 私には2つの主要なニーズがありますが、この質問で焦点を当てたいのは2番目だけです。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。好奇心may盛な方のために、この回答記事の最後でこの部分について説明しましたが、ここで焦点を当てたいものではありません。 私がコメントを求めている2番目の問題は、「他の多くのクラスによって拡張されることを意図したクラスにビルダーを実装するにはどうすればよいですか」です。ビルダーを使用してクラスを拡張するのは、当然、ビルダーを使用せずに拡張するよりも困難です。を実装Needableするビルダーを持つクラスを拡張することは、そのため、それに関連付けられた重要なジェネリックを持ち、扱いにくいです。 それが私の質問です:Bloch Builder(私が呼ぶもの)をどのように改善できますか?そのクラスが「ベースクラス」であることを意図している場合でも、自由にビルダーを任意のクラスに添付できますビルダー(およびその潜在的なジェネリック)が彼らに課す余分な荷物のために、私の未来やライブラリのユーザーを落胆させることなく、何度も何度も拡張およびサブ拡張されましたか? 補遺 私の質問は上記のパート2に焦点を当てていますが、対処方法など、問題1について少し詳しく説明したいと思いました。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。これは、拡張クラスがこれらのチェーンを再実装する必要があることを防ぐためではなく、もちろん、これらのメソッドチェーンを利用したい非サブクラスを防ぐ方法を再実装する必要があります- ユーザーがそれらを利用できるように、すべての自己復帰機能を実装しますか?このために、ここでインターフェースのスケルトンを印刷し、今のところはそのままにしておく必要がある必要性の高いデザインを考え出しました。私にとってはうまくいきました(この設計は長年の開発でした...最も困難な部分は循環依存を回避することでした): public interface Chainable { Chainable chainID(boolean b_setStatic, Object o_id); Object getChainID(); Object getStaticChainID(); } public interface Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); boolean isNeededUsable(); R endCfg(); } …

11
Java vs. C#-生産性の観点[終了]
Javaでの長年の経験とC#および.NETでの長年の経験がある場合、これら2つの環境間のソフトウェア開発の生産性の違いについての意見を評価します。顧客の1人が、既存のソフトウェアソリューションの置き換えを検討しています。交換には約が必要です。10〜15人年の作業、Javaまたは.NETの選択は、それらの間の生産性の違いに基づいて、必要な投資と市場投入までの時間に大きく影響する可能性があります。 JavaとC#/。NETのソフトウェア開発の生産性の違いを示す情報を提供していただけますか?次のように回答を受け取りたいと思います。 私の経験は、JavaでのX年の経験とC#/。NETでのX年の経験に基づいています。次のことを考慮すると、JavaはC#.NETまたはC#/。NETよりもX%生産的です。

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