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

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

10
「final」キーワードが役立つのはなぜですか?
Javaには長い間派生できないクラスを宣言する力があったように思われますが、現在はC ++にもあります。しかし、SOLIDのOpen / Close原則に照らして、なぜそれが役立つのでしょうか?私には、finalキーワードのように聞こえますfriend-それは合法ですが、あなたがそれを使用している場合、ほとんどの場合、設計が間違っています。派生不可能なクラスが優れたアーキテクチャまたはデザインパターンの一部になるような例をいくつか提供してください。
54 java  c++  solid  final 

5
Javaでプリミティブvsクラスを使用する場合
Javaにはブール(クラス)対ブール(プリミティブ)があることがわかります。同様に、整数(クラス)対int(プリミティブ)があります。クラスに対してプリミティブバージョンを使用する場合のベストプラクティスは何ですか?特定の(パフォーマンス?)理由がない限り、基本的に常にクラスバージョンを使用する必要がありますか?それぞれを使用する最も一般的で受け入れられている方法は何ですか?
54 java  class  usage 

8
コンストラクターではなく、JavaとC#の静的mainメソッドが必要な理由
Applicationクラスのインスタンス(エントリポイントを含む)でアプリケーションインスタンスを表すのではなく、(特に)JavaとC#が静的メソッドをエントリポイントとして持つことにした理由について、プライマリソースまたはセカンダリソースからの明確な回答を探しています。適切なコンストラクタであること)。 私の以前の研究の背景と詳細 これは以前に尋ねられました。残念ながら、既存の回答は単に質問を懇願しているだけです。特に、次の答えは私を満足させるものではありません。 コンストラクターがオーバーロードされると、あいまいさが生じます。–実際、C#(およびCとC ++)では異なる署名を使用できるMainため、同じ潜在的なあいまいさが存在し、対処されます。 staticこの方法は、その初期化の順序は明らかである前に、何のオブジェクトをインスタンス化することはできないことを意味します。–これは事実上間違っています。一部のオブジェクトは前にインスタンス化されます(静的コンストラクターなど)。 したがって、親オブジェクトをインスタンス化することなく、ランタイムによって呼び出すことができます。–これはまったく答えではありません。 なぜこれが有効で興味深い質問であると思うのかをさらに正当化するために: 多くのフレームワークは、クラスを使用してアプリケーションを表し、コンストラクターをエントリポイントとして使用します。たとえば、VB.NETアプリケーションフレームワークは、専用のメインダイアログ(およびそのコンストラクター)をエントリポイント1として使用します。 JavaもC#も技術的にmainメソッドを必要としません。まあ、C#をコンパイルするには1つが必要ですが、Javaでもそれは必要ありません。また、どちらの場合も実行には必要ありません。したがって、これは技術的な制限ではないようです。そして、最初の段落で述べたように、単なる慣習としては、JavaとC#の一般的な設計原則に不自然に合わないようです。 明確に言うと、静的メソッドを使用することには特別な欠点はありません。それは明らかに奇妙です。そのため、技術的な根拠があるのではないかと思いました。main 私は単なる推測ではなく、一次または二次情報源からの決定的な答えに興味があります。 1ただし、Startupこれをインターセプトする可能性のあるコールバック()があります。
54 java  c#  history  entry-point 

4
Unixバイナリに近い他の言語と比較して、Javaを使用する場合、Dockerを使用する開発上の利点は無効になりますか?
私は言った友人がいました: Dockerは素晴らしいです。これを使用して、本番環境とそのすべての癖をローカルマシンに複製できます。その後、すべてのステージングワークフローを介して、そのインスタンスを超高速で直接展開できます。 これは、開発者がRuby、PHP、またはGoを記述している場合に当てはまります。オペレーティングシステムへの方向バイナリリンクがありました。 ただし、Javaを使用する場合は、オペレーティングシステムと言語の間に仮想層が既に存在するため、基盤となるオペレーティングシステムに関係なく、操作の一貫性が保たれます。 おそらく、この場合、開発者がローカルで運用環境を複製するためにDockerを実行する利点は無効になります。(Ruby、PHP、またはGoと比較)。 私はこれについて議論することを受け入れており、反対の見解を(証拠とともに)聞きたいと思っています。 Unixバイナリに近い他の言語と比較して、Javaを使用する場合、Dockerを使用する開発上の利点は無効になりますか?
53 java  deployment  jvm  docker 

9
クラスのメソッドは独自のゲッターとセッターを呼び出す必要がありますか?
私が働いている場所では、このようなことをするクラスがたくさんあります。 public class ClassThatCallsItsOwnGettersAndSetters { private String field; public String getField() { return field; } public void setField(String field) { this.field = field; } public void methodWithLogic() { setField("value"); //do stuff String localField = getField(); //do stuff with "localField" } } これを最初から書いた場合methodWithLogic()、代わりに次のように書いたでしょう。 public class ClassThatUsesItsOwnFields { private String field; public …

6
Javaで可能な限りラムダ式を使用していますか?
私は最近、Java 8で導入されたLambda式を習得しました。関数型インターフェースを使用するときはいつでも、関数型インターフェースを実装するクラスを作成する代わりに、常にLambda式を使用する傾向があります。 これは良い習慣と考えられていますか?または、機能インターフェイスにLambdaを使用することが適切でない状況ですか?
52 java  lambda 

9
Javaに `void`メソッドがあるのはなぜですか?
Javaにvoidメソッドが必要なのはなぜですか?参照: voidと宣言されたメソッドは値を返しません。 私の考えている限り、のすべての使用はvoid、ステータスフラグ、呼び出されているオブジェクト、またはを返すことにより、より適切に機能しますnull。 これにより、すべての呼び出しが割り当て可能なステートメントになり、ビルダーパターンとメソッドチェーンが容易になります。通常、効果のためにのみ呼び出されるメソッドは、ブールSuccess型またはジェネリック型を返すか、失敗すると例外をスローします。

10
インタビュー中に製品の設計上の決定について尋ねることは賢明ですか?[閉まっている]
私は最近インタビューの質問について考えていて、私が過去に持っていた悪いインタビューの経験について考えてきました。特に注意すべき点の1つは、チームが製品でSpringよりもEJB 3を使用する理由をインタビュアーに尋ねたところです。インタビュアーは、「SpringがJavaソフトウェア開発のすべてではなく、すべてを終わらせるわけではないので、この仕事をしたいかどうか」と大声で私の顔を引き裂いた。これに応じて、私は彼に、これはおそらく私にとって仕事ではないだろうと話し、私はすぐにインタビューから出ました。 インタビューの冒頭で、会社の離職率が高く、彼らが働いていた製品は最初にModula-3で作成され、その後Perlに、最後にJavaに移植されたと通知されました。Java、EJB、SQL、JDBCをカバーする技術的な質問の10ページの小冊子を手渡され、私が働いた技術スタックについて質問されました。質問するように促されたとき、私は彼らに彼らの技術スタックについて尋ね、合理的な答えを得ることが合理的であると感じました。 質問: インタビューで採用されたアーキテクチャの選択について調査するのは良い考えですか?そうでない場合、なぜですか? 私自身の観点から、インタビューは双方向のプロセスです。インタビュアーが私の技術スキルをテストしている場合、私は彼らに同じ質問をするすべての権利を持っています: 1)ソフトウェア開発に対する彼らの考え方と態度を理解します。2)そのアプローチが、私がその種の問題にどのようにアプローチするかと一致しているかどうかを判断します。 怒ったインタビュアーがインタビュースキルが不十分で、インタビューが双方向のやり取りであることを忘れた可能性があります。これを聞かれたら、理にかなった答えを出したでしょうが、インタビューなしで、頭が上下に会話せずに上下するだけの穏やかな降伏状態になろうとはしませんでした。
51 java  interview 

9
コンパイラの警告を無視するべきではないとチームメートを説得するにはどうすればよいですか?
私は、Eclipseを使用したJavaでの巨大プロジェクト(依存関係の管理が不十分なために簡単に分離できない数十のミニプロジェクトの絡み合った組み合わせに似ていますが、それは別の議論です)に取り組んでいます。コンパイラの設定からの警告を既にオフにしており、プロジェクトにはまだ10,000を超える警告があります。 私は、すべての警告に対処し、可能であればすべての警告を修正し、安全であると見なされていると思われる警告を抑制しようとすることを強く支持しています。(実装/オーバーライドされたすべてのメソッドを@Overrideとしてマークするという私の宗教的な強迫観念も同じです)。私の最大の主張は、一般に警告はコンパイル時に潜在的なバグを見つけるのに役立つということです。おそらく100回のうち99回の警告は重要ではありませんが、大きなバグを防ぐために一時的に保存することで頭を悩ますことは価値があると思います。(私の他の理由は、コードのクリーンさを持つ私の明らかなOCDです)。 しかし、私のチームメイトの多くは気にしないようです。偶然それらに出くわしたときの警告をときどき修正します(しかし、同僚が書いたコードに触れると注意が難しいことを知っています)。現在、クラスよりも文字通り多くの警告があるため、警告の利点は非常に最小限に抑えられています。これは、警告が非常にありふれたものであるため、誰もそれらのすべてを調べる必要がないためです。 チームメイト(またはその勢力)に警告に対処する(または完全に調査した場合は抑制する)必要があることをどのように納得させることができますか?それとも、私は自分がクレイジーだと確信する必要がありますか? ありがとう (PS私が最終的にこの質問を投稿するように私に促したことを言及するのを忘れたのは、私が警告が生成されるよりも遅く警告を修正していることに悲しいことに気づいたということです)
51 java  eclipse 

4
プライベートゲッターではなくパブリックファイターを使用する
ほとんどの不変のPOJOは次のように書かれています: public class MyObject { private final String foo; private final int bar; public MyObject(String foo, int bar) { this.foo = foo; this.bar = bar; } public String getFoo() { return foo; } public int getBar() { return bar; } } しかし、私は次のようにそれらを書く傾向があります。 public class MyObject { public final String foo; …

11
テストを開始するためにデザインが必要な場合、TDDがどのように優れたデザインを取得するのに役立つかがわかりません。
TDD、特に開発の部分に頭を包み込もうとしています。私はいくつかの本を見てきましたが、私が見つけた本は主にテストの部分に取り組んでいます-NUnitの歴史、テストが良い理由、レッド/グリーン/リファクタリング、文字列計算機の作成方法。 良いものですが、それはTDDではなく「単なる」単体テストです。具体的には、テストを開始するためにデザインが必要な場合、TDDが優れたデザインを取得するのにどのように役立つか理解できません。 例として、次の3つの要件を想像してください。 カタログには製品のリストが必要です カタログは、ユーザーが閲覧した製品を記憶する必要があります ユーザーは製品を検索できる必要があります この時点で、多くの本は魔法のうさぎを帽子から引き出して「ProductServiceのテスト」に飛び込みますが、そもそもProductServiceがあるという結論に至った経緯については説明していません。それが私が理解しようとしているTDDの「開発」の部分です。 既存の設計が必要ですが、エンティティサービス以外のもの(つまり、Productがあるため、ProductServiceが必要です)はどこにも見つかりません(たとえば、2番目の要件では、ユーザーですが、思い出させる機能をどこに配置しますか?また、検索はProductServiceの機能または別のSearchServiceの機能ですか?どちらを選択すべきかをどのように知ることができますか?) SOLIDによると、UserServiceが必要になりますが、TDDなしでシステムを設計すると、単一メソッドサービスが大量に発生する可能性があります。TDDは、最初に自分のデザインを発見することを意図したものではありませんか? 私は.net開発者ですが、Javaリソースも機能します。実際のビジネスアプリケーションを扱う実際のサンプルアプリケーションや本はないようです。TDDを使用して設計を作成するプロセスを示す明確な例を提供できますか?
50 java  c#  .net  tdd 

9
なぜ==演算子文字列値の比較がJavaにならないのですか?
有能なすべてのJavaプログラマーは、==が参照の等価性をチェックするため、==ではなくString.equals()を使用してストリングを比較する必要があることを知っています。 文字列を扱うとき、ほとんどの場合、参照の等価性ではなく値の等価性をチェックしています。==を使用するだけで文字列値を比較できる言語であれば、より直感的になると思います。 比較として、C#の==演算子は文字列 sの値が等しいかどうかをチェックします。参照の等価性を本当に確認する必要がある場合は、String.ReferenceEqualsを使用できます。 もう1つの重要な点は、文字列は不変であるため、この機能を許可しても害はありません。 これがJavaで実装されない特別な理由はありますか?

11
C ++には「未定義の動作」(UB)があり、C#やJavaなどの他の言語にはないのはなぜですか?
このStack Overflowの投稿には、C / C ++言語仕様が「未定義の動作」であると宣言している状況のかなり包括的なリストがリストされています。ただし、C#やJavaなどの他の現代言語に「未定義の動作」という概念がない理由を理解したいと思います。つまり、コンパイラの設計者は、考えられるすべてのシナリオ(C#およびJava)を制御できるかどうか(CおよびC ++)を制御できますか?

4
リフレクションを使用して汎用のセッターとゲッターを作成するのはなぜ悪い考えですか?
しばらく前に、すべての可変変数に対してゲッターとセッターを持たないようにする方法に関する質問に対するこの回答を書きました。当時、私はこれが悪い考えであると口にするのが難しい直感しか持っていませんでしたが、OPはそれを行う方法を明示的に求めていました。私はここでなぜこれが問題になるのかを検索し、この質問を見つけました。その質問の答えは、絶対に必要でない限りリフレクションを使用するのは悪い習慣であると考えているようです。 それで、特に一般的なゲッターとセッターの場合に、反射を避けるべきだという理由を誰かが言葉で表現できますか?
49 java  reflection 

6
Javaチェック例外の回避策
ラムダとデフォルトのメソッドインターフェースに関する新しいJava 8の機能に感謝します。それでも、私はまだチェックされた例外に飽きています。たとえば、オブジェクトのすべての表示フィールドを一覧表示するだけの場合は、単に次のように記述します。 Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); ただし、getメソッドはConsumerインターフェイスコントラクトに同意しないチェック例外をスローする可能性があるため、その例外をキャッチして次のコードを記述する必要があります。 Arrays.asList(p.getClass().getFields()).forEach( f -> { try { System.out.println(f.get(p)); } catch (IllegalArgumentException | IllegalAccessException ex) { throw new RuntimeException(ex); } } ); ただし、ほとんどの場合、例外をaとしてスローし、RuntimeExceptionコンパイルエラーなしで例外をプログラムに処理させるかどうかを許可します。 それで、私はチェックされた例外の迷惑のための私の物議を醸す回避策についてあなたの意見を持ちたいです。そのために、次のように補助インターフェイスConsumerCheckException<T>とユーティリティ関数rethrow(Dovalのコメントの推測に応じて更新)を作成しました。 @FunctionalInterface public interface ConsumerCheckException<T>{ void accept(T elem) throws Exception; } public class Wrappers { public static <T> Consumer<T> rethrow(ConsumerCheckException<T> c) …

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