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

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

8
Javaがif(5){…} if Cのような数値条件を厳密に許可しないのはなぜですか?
次の2つの小さなプログラムがあります。 C #include <stdio.h> int main() { if (5) { printf("true\n"); } else { printf("false\n"); } return 0; } Java class type_system { public static void main(String args[]) { if (5) { System.out.println("true"); } else { System.out.println("false"); } } } エラーメッセージを報告します。 type_system.java:4: error: incompatible types: int cannot be converted to …
33 java  c  type-systems 


8
ここで例外をスローするのはアンチパターンですか?
コードレビューの後、デザインの選択について議論したところです。あなたの意見は何でしょうか。 このPreferencesクラスは、キーと値のペアのバケットです。NULL値は正当です(重要です)。特定の値がまだ保存されていない可能性があり、要求されたときに事前定義されたデフォルト値で初期化することにより、これらのケースを自動的に処理したいと考えています。 説明したソリューションでは、次のパターンを使用しました(注:これは実際のコードではなく、明らかに-説明のために単純化されています)。 public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch (KeyNotFoundException e) { String defaultValue = defaultValues.get(key); valuesFromDatabase.put(key, defaultvalue); return defaultValue; } …

10
サブクラスのAPIを汚染する場合でも、自分自身をキャストするオブジェクトを使用しても大丈夫ですか?
基本クラスがありBaseます。2つのサブクラスとがSub1ありSub2ます。各サブクラスにはいくつかの追加メソッドがあります。たとえば、Sub1has Sandwich makeASandwich(Ingredients... ingredients)、およびSub2has boolean contactAliens(Frequency onFrequency)。 これらのメソッドは異なるパラメーターを取り、まったく異なることを行うため、完全に互換性がなく、この問題を解決するためにポリモーフィズムを使用することはできません。 Baseほとんどの機能を提供し、Baseオブジェクトの大規模なコレクションを持っています。ただし、すべてのBaseオブジェクトはa Sub1またはaのいずれかSub2であり、時にはそれらがどれであるかを知る必要があります。 次のことを行うのは悪い考えのようです。 for (Base base : bases) { if (base instanceof Sub1) { ((Sub1) base).makeASandwich(getRandomIngredients()); // ... etc. } else { // must be Sub2 ((Sub2) base).contactAliens(getFrequency()); // ... etc. } } そこで、キャストせずにこれを回避する戦略を思いつきました。 Base現在、これらのメソッドがあります: boolean isSub1(); Sub1 asSub1(); Sub2 asSub2(); そしてもちろん、Sub1これらのメソッドを次のように実装します …

3
Javaは無料/オープンソースですか?
2006年11月13日、Sunは、GNU General Public License(GPL)の条件の下で、Javaの多くを無料のオープンソースソフトウェア(FOSS)としてリリースしました。2007年5月8日に、Sunはプロセスを終了し、Sunが著作権を保有していないコードの一部を除き、Javaのすべてのコアコードをフリーソフトウェア/オープンソース配布条件で利用できるようにしました。 OpenJDK(Open Java Development Kit)は、Javaプログラミング言語の無料でオープンソースの実装です。これは、Sun Microsystemsが2006年に開始した取り組みの結果です。実装は、リンク例外を除き、GNU General Public License(GNU GPL)の下でライセンスされています。 Javaが言論の自由のようにオープンソースでもフリーでもないという人がまだいるのはなぜですか? 何か不足していますか? Javaはまだ独自仕様ですか?

6
ネストされたループはなぜ悪い習慣と見なされるのですか?
私の講師は、ネストされたループを処理するときに参照できるように、Javaでループに「ラベル付け」することが可能であると今日述べました。それで、私はそれについて知らなかったので機能を調べました、そして、この機能が説明された多くの場所に警告が続き、ネストされたループを思いとどまらせました。 どうしてか分からないの?それはコードの可読性に影響するからですか?それとももっと「技術的」なものですか?

3
なぜグリーンスレッドではないのですか?
私はこれに関する質問がすでにカバーされていることを知っていますが(例えばhttps://stackoverflow.com/questions/5713142/green-threads-vs-non-green-threads)、満足のいく答えが得られたとは感じません。 問題は、なぜJVMがグリーンスレッドをサポートしないのかということです。 コードスタイルのJava FAQでこれを言っています: 緑のスレッドは、すべてのコードが単一のオペレーティングシステムスレッドで実行されるJava仮想マシン(JVM)の動作モードを指します。 そして、これはjava.sun.com上で: 欠点は、グリーンスレッドを使用すると、Linuxのシステムスレッドが利用されないため、CPUを追加してもJava仮想マシンがスケーラブルではないことです。 JVMには、コアの数に等しいシステムプロセスのプールがあり、その上でグリーンスレッドを実行できるように思えます。頻繁にブロックする非常に多くのスレッドがある場合、これはいくつかの大きな利点を提供します(主に現在のJVMがスレッド数を制限するため)。 考え?

7
C#とJavaが言語の半分であるというこの声明はどういう意味ですか?[閉まっている]
記事:Why POCOには、次の文があります。 Maciej Sobczak氏は、「誰かが私に言語の半分を教えてくれて、それが自分自身の保護のためだと言っているのが好きではない」と言います。 私にもかかわらず、彼は何を意味するのか理解していないC#は、Microsoftが所有しているとのJava、Oracleによって所有され、それは彼らが言語の半分を保持するという意味ではありません、それをしませんか?私はその文を証明する証拠を見つけられませんでした、そして私はこれについて本当に興味があります。そして、「私自身の保護のため」の部分についてさらに興味があります。
32 java  c#  microsoft  oracle 

8
Javaの優れたスタイル(インスタンス変数と戻り値)
クラスのいくつかのメソッドで共通のデータを使用する必要がある場合、これらの2つの方法のどちらを使用するかを決めるのに苦労することがよくあります。より良い選択は何でしょうか? このオプションでは、インスタンス変数を作成して、追加の変数を宣言する必要を回避し、メソッドパラメーターの定義を回避することもできますが、これらの変数がインスタンス化/変更される場所はそれほど明確ではありません。 public class MyClass { private int var1; MyClass(){ doSomething(); doSomethingElse(); doMoreStuff(); } private void doSomething(){ var1 = 2; } private void doSomethingElse(){ int var2 = var1 + 1; } private void doMoreStuff(){ int var3 = var1 - 1; } } または、ローカル変数をインスタンス化して引数として渡すだけですか? public class MyClass { MyClass(){ int var1 …

4
Javaでデバッグ出力を処理する正しい方法は何ですか?
私の現在のJavaプロジェクトがますます大きくなるにつれて、コードのいくつかのポイントにデバッグ出力を挿入する必要性が同様に高まっていると感じています。 テストセッションの開始または終了に応じて、この機能を適切に有効または無効にするには、通常private static final boolean DEBUG = false、テストで検査するクラスの先頭にa を付け、この方法で(たとえば)簡単に使用します。 public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } など。 もちろん、それはうまくいきますが、数個を見つめていなければ、DEBUGをtrueに設定するクラスが多すぎる可能性があります。 逆に、出力されるテキストの量が圧倒的になる可能性があるため、私は(他の多くの人と同じように)アプリケーション全体をデバッグモードにすることを好みません。 だから、そのような状況をアーキテクチャ的に処理する正しい方法がありますか、最も正しい方法はDEBUGクラスメンバーを使用することですか?


6
どのクラスをSpringによって自動配線する必要がありますか(依存性注入を使用する場合)?
しばらくの間、SpringでDependency Injectionを使用してきましたが、それがどのように機能し、それを使用することの長所と短所を理解しています。しかし、新しいクラスを作成するとき、よく疑問に思う-このクラスはSpring IOC Containerによって管理されるべきか? また、@ Autowiredアノテーション、XML構成、セッターインジェクション、コンストラクターインジェクションなどの違いについては説明しません。私の質問は一般的なものです。 コンバーター付きのサービスがあるとしましょう: @Service public class Service { @Autowired private Repository repository; @Autowired private Converter converter; public List<CarDto> getAllCars() { List<Car> cars = repository.findAll(); return converter.mapToDto(cars); } } @Component public class Converter { public CarDto mapToDto(List<Car> cars) { return new ArrayList<CarDto>(); // do the mapping here …

5
C#とJavaが参照の等価性を「==」のデフォルトとして使用するのはなぜですか?
私はしばらくの間、JavaとC#(および他の言語)がデフォルトでの等価性を参照する理由を熟考してきました==。 私が行うプログラミング(確かにプログラミングの問題のごく一部にすぎません)では、オブジェクトを比較するとき、参照の等価性ではなく、論理的な等価性がほとんど常に必要です。私は、これらの言語の両方が、==論理的な平等性を持ち.ReferenceEquals()、参照の平等性を使用するのではなく、このルートを採用した理由を考えようとしました。 明らかに、参照の等価性を使用することは実装が非常に簡単で、非常に一貫した動作を提供しますが、今日見られるほとんどのプログラミング手法にうまく適合するとは思えません。 論理比較を実装しようとすることの問題について無知に思われたくはありません。また、すべてのクラスで実装する必要があります。また、これらの言語はかなり前に設計されたものであることに気づきましたが、一般的な疑問が残っています。 これにデフォルトを設定することの大きな利点はありますか、それとも単にデフォルトの動作が論理的等価であるべきであり、クラスに論理的等価性が存在しない場合に参照の等価性にデフォルト設定することは妥当と思われますか?


9
Builderパターンを実装するときにBuilderクラスが必要なのはなぜですか?
Builderパターン(主にJava)の多くの実装を見てきました。それらはすべて、エンティティクラス(クラスとしましょうPerson)とビルダークラスを持っていますPersonBuilder。ビルダーはさまざまなフィールドを「スタック」し、new Person渡された引数とともにを返します。Personクラス自体にすべてのビルダーメソッドを配置するのではなく、明示的にビルダークラスが必要なのはなぜですか? 例えば: class Person { private String name; private Integer age; public Person() { } Person withName(String name) { this.name = name; return this; } Person withAge(int age) { this.age = age; return this; } } 簡単に言えます Person john = new Person().withName("John"); なぜPersonBuilderクラスが必要なのですか? 私が見る唯一の利点は、Personフィールドをとして宣言できることfinalです。したがって、不変性が保証されます。

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