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

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

4
なぜC#開発者は括弧を開くのですか?[閉まっている]
私はここ数年のほとんどを主にC#とSQLで作業してきました。私がこれまでに取り組んできたすべてのプログラマーは、関数または制御フローステートメントの開始括弧を新しい行に配置する習慣がありました。そう ... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 特にif / elseステートメントでは、これがスペースの無駄であることに常に感銘を受けました。そして、C#の以降のバージョンには、次のような代替手段が存在することを知っています。 if(myBoolean == true) //do something on one line of code しかし、ほとんど誰も使用しませんでした。誰もが中括弧で改行をしました。 それから久しぶりにJavaScriptをやり直しました。私の記憶では、JavaScript開発者は以前とまったく同じ中かっこと改行を使用していましたが、ほとんどの開発者はすべての派手な新しいライブラリとものを使用して、宣言の後に開き中かっこを配置しました。 function MyJavaScriptFunction() { //do something } JavaScriptでクロージャーと関数ポインターを使用することが一般的になったため、多くのスペースを節約し、物事を読みやすくするため、この意味を理解できます。だから私はなぜそれがC#で完了したものとして見られなかったのだろうと思った。実際、Visual Studio 2013で上記のコンストラクトを試してみると、実際に再フォーマットされて、開き括弧が新しい行に追加されます。 今、私はコードレビューSEにこの質問を見た: https://codereview.stackexchange.com/questions/48035/questions-responses-let-me-tell-you-about-you これで私はJavaでそれを学んだ、A私があまり馴染みのない言語です。宣言の直後に中括弧を開くのは、最新のJavaScriptのように厳格であると考えられています。 …
44 java  c#  javascript  syntax 

10
「プレーンな古いデータ」クラスを使用する理由はありますか?
レガシーコードでは、データのラッパーにすぎないクラスが時々見られます。何かのようなもの: class Bottle { int height; int diameter; Cap capType; getters/setters, maybe a constructor } オブジェクト指向についての私の理解は、クラスはデータの構造であり、そのデータを操作する方法だということです。これは、このタイプのオブジェクトを除外するようです。私にとって、それらはstructsオブジェクト指向の目的に勝るものではありません。コードの匂いかもしれませんが、必ずしも悪いとは思いません。 そのようなオブジェクトが必要になる場合はありますか?これが頻繁に使用される場合、デザインが疑わしいですか?

9
インターフェースを将来使用するためのプログラミング
次のようなインターフェイスを設計した同僚が隣に座っています。 public interface IEventGetter { public List<FooType> getFooList(String fooName, Date start, Date end) throws Exception; .... } 問題は、現時点では、この「end」パラメーターをコードのどこにも使用していないことです。将来的に使用する必要があるため、そこにあるだけです。 現在、役に立たないインターフェースにパラメーターを入れるのは悪い考えだと彼に納得させようとしていますが、「終了」日付の使用をいつか実装すると、多くの作業が必要になると主張し続けます。その後、すべてのコードを適応させる必要があります。 さて、私の質問は、「尊敬される」コーディングの達人のようなトピックを扱っているソースはありますか?


4
Rich Hickeyは、「[インターフェイス/クラス/タイプ]のすべての特異性があなたの再利用を殺します!」と言ったとき、何を意味しましたか?
Rich Hickeyの思考を刺激するgoto会議の基調講演「価値の価値」で29分間、彼はJavaのような言語のオーバーヘッドについて話し、「これらのインターフェースはすべて再利用を殺します」のような声明を出します。彼はどういう意味ですか?本当? 私は答えを探して、次のことを見つけました。 最小知識の原則別名、気密APIインターフェイスを奨励するデメテルの法則。ウィキペディアには、いくつかの欠点もリストされています。 再利用ではなく、その使用が適切な目標であると主張するケヴリン・ヘニーのインペリアル衣料危機。 ジャック・ディーデリッヒの「クラスを書くのをやめなさい」は、一般的なオーバーエンジニアリングに反対する議論をしています。 明らかに、不適切に書かれたものは何も役に立たないでしょう。しかし、適切に作成されたAPIのインターフェースは、そのコードの使用をどのように防ぐのでしょうか?1つの目的のために作られたものが他のものにより多く使用されている歴史の中に例があります。しかし、ソフトウェアの世界では、意図していない目的で何かを使用すると、通常は壊れます。 私は、いくつかのコードの正当であるが意図しない使用を防ぐ良いインターフェースの良い例を探しています。それは存在しますか?想像できません。

8
スイッチケースの使用中にデフォルトのケースを追加する必要がありますか?
最近のコードレビュー中に、ブロック内で何もすることがなくても、ブロックが使用されるdefaultすべてのファイルにケースを入れるように頼まれswitchましたdefault。つまり、defaultケースを入れて、何も書いてはいけないということです。 これは正しいことですか?それはどのような目的に役立つでしょうか?

8
java.util.ArrayListでnullを追加できるのはなぜですか?
なぜjava.util.ArrayList追加できるのだろうかnull。に追加nullしたいケースはありますArrayListか? プロジェクトにバグがあり、そこにコードが追加さnullれていて、バグの場所ArrayListを見つけるのが難しいため、この質問をしています。明らかにa NullPointerExceptionがスローされましたが、他のコードが要素にアクセスしようとするまではスローされませんでした。問題は、nullオブジェクトを追加したコードを見つける方法でした。ArrayList要素が追加されているコードで例外をスローすると、もっと簡単になります。

4
Javaと比較したScalaのパフォーマンス
まず第一に、これはどちらが優れているかを判断するための言語-X-言語-Yの質問ではないことを明確にしたいと思います。 私はJavaを長い間使用しており、Javaを使用し続けるつもりです。これと並行して、私は現在非常に興味を持ってScalaを学んでいます。私の印象に慣れる小さなことは別として、私はこの言語で本当にうまく働くことができるということです。 私の質問は、Scalaで書かれたソフトウェアはJavaで書かれたソフトウェアと比較して、実行速度とメモリ消費量の点でどうですか?もちろん、これは一般的に答えるのが難しい質問ですが、パターンマッチング、高階関数などの高レベルの構成体がオーバーヘッドをもたらすと予想されます。 ただし、Scalaでの私の現在の経験は、コードが50行未満の小さな例に限定されており、これまでベンチマークを実行していません。したがって、実際のデータはありません。 ScalaにJava に対するオーバーヘッドがあることが判明した場合、Scala のより複雑な部分とJavaのパフォーマンスに重要な部分をコーディングするScala / Javaプロジェクトを混合するのは理にかなっていますか?これは一般的な習慣ですか? 編集1 私は小さなベンチマークを実行しました。整数のリストを作成し、各整数に2を掛けて新しいリストに入れ、結果のリストを出力します。Java実装(Java 6)とScala実装(Scala 2.9)を作成しました。Ubuntu 10.04でEclipse Indigoで両方を実行しました。 結果は比較可能です:Javaで480ミリ秒、Scalaで493ミリ秒(100回の繰り返しの平均)。ここに私が使用したスニペットがあります。 // Java public static void main(String[] args) { long total = 0; final int maxCount = 100; for (int count = 0; count < maxCount; count++) { final long t1 = System.currentTimeMillis(); final int …


5
ラムダ式は、単一のメソッドを持つ匿名の内部クラス以上のものですか?
Java 8には、待望のラムダ式に関する新しい誇大宣伝があります。3日ごとに、彼らがいかにクールであるかについての別の記事が表示されます。 私が理解している限り、ラムダ式は(少なくともバイトコードレベルで)単一メソッドを持つ匿名内部クラスにすぎません。これに加えて、別の優れた機能があります-型推論ですが、これと同等の機能は、あるレベルのジェネリックで実現できると信じています(もちろん、ラムダ式のようなきちんとした方法ではありません)。 これを知っていると、ラムダ式は単なるJavaの構文糖衣以上のものをもたらすでしょうか?現在の言語機能では構築できないラムダ式を使用して、より強力で柔軟なクラスやその他のオブジェクト指向の構造を作成できますか?

8
最新のオブジェクト指向言語はC ++の配列ストアのパフォーマンスと競合できますか?
少なくともある程度慣れ親しんでいる最新のオブジェクト指向プログラミング言語(基本的にはJava、C#、およびD)がすべて共変配列を許可していることに気付きました。つまり、文字列配列はオブジェクト配列です。 Object[] arr = new String[2]; // Java, C# and D allow this 共変配列は、静的型システムの穴です。コンパイル時に検出できない型エラーが発生する可能性があるため、実行時は配列へのすべての書き込みをチェックする必要があります。 arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException これは、多くの配列ストアを実行する場合、ひどいパフォーマンスヒットのようです。 C ++には共変配列がないため、このようなランタイムチェックを行う必要はありません。つまり、パフォーマンスが低下することはありません。 必要なランタイムチェックの数を減らすために行われた分析はありますか?たとえば、私が言う場合: arr[1] = arr[0]; ストアが失敗することはないと主張することができます。私が考えていない他の多くの可能な最適化があると確信しています。 最新のコンパイラーは実際にこの種の最適化を行いますか、または、例えばクイックソートが常にO(n log n)の不要なランタイムチェックを行うという事実に耐えなければなりませんか? 現代のオブジェクト指向言語は、共変配列をサポートすることによって生じるオーバーヘッドを回避できますか?
40 c#  java  c++  d 

9
クラスを抽象クラスとして宣言する必要があるのはなぜですか?
私は構文、抽象クラスに適用されるルールを知っており、抽象クラスの使用法を知りたい 抽象クラスは直接インスタンス化できませんが、他のクラスによって拡張できます そうすることの利点は何ですか? インターフェースとどう違うのですか? 1つのクラスで複数のインターフェイスを実装できるが、1つの抽象クラスしか拡張できないことを知っています。インターフェイスと抽象クラスの違いはそれだけですか? インターフェースの使用法を知っています。JavaでのAWTのイベント委任モデルからそれを学びました。 どのような状況でクラスを抽象クラスとして宣言する必要がありますか?その利点は何ですか?

6
Java継承の「拡張」を避ける理由
ジェイム・ゴスリングは言った 「可能な限り、実装の継承を避ける必要があります。」 代わりに、インターフェイスの継承を使用します。 しかし、なぜ?キーワード "extends"を使用してオブジェクトの構造を継承しないようにし、同時にコードをオブジェクト指向にする方法はありますか? 「書店で本を注文する」などのシナリオで、この概念を示すオブジェクト指向の例を教えてください。

7
定数を定義するインターフェースを持つのは悪い習慣ですか?
Javaでjunitテストクラスのセットを書いています。さまざまなテストクラスで必要な文字列など、いくつかの定数があります。それらを定義し、すべてのテストクラスがそれを実装するインターフェイスについて考えています。 私が見る利点は次のとおりです。 定数への簡単なアクセス:MY_CONSTANT代わりにThatClass.MY_CONSTANT 各定数は一度だけ定義されます このアプローチはむしろ良い習慣ですか、悪い習慣ですか?インターフェイスの概念を少し乱用したい気がします。 インターフェイス/定数について一般的に答えることができますが、特別なことがあれば単体テストについても答えることができます。

3
forループの代わりに「機能的操作」を使用する必要があるのはなぜですか?
for (Canvas canvas : list) { } NetBeansは、「機能的操作」を使用することを提案しています。 list.stream().forEach((canvas) -> { }); しかし、なぜこれが好ましいのでしょうか?どちらかといえば、読みやすく、理解しにくいです。を呼び出してからstream()、forEach()パラメーター付きのラムダ式を使用していますcanvas。for最初のスニペットのループよりも優れていることはわかりません。 明らかに、私は美学だけについて話している。おそらく、ここには技術的な利点がありますが、私には欠けています。それは何ですか?代わりに2番目の方法を使用する必要があるのはなぜですか?

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