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

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

2
構造タイピングの(不)利点
私はちょうどダニエル・シュピーワクによるこの講演を見ました。そこで彼は、Scalaのans Javaの名目上の型付けと比較した構造型付けの利点について話しています。この違いの1つの例は、次のJavaコードです public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; もちろんその間タイプの互換性ため、コンパイルされないだろうFooとは、Bar名前によって決定されます。 一方、構造型システムでは、両方の型が等しいか互換性があると宣言できるため、とりわけ、チェックされたアヒルの型付けが可能になります。 今、私は構造型システムの利点のほとんどを理解していると思いますが、次のような例から型安全性を無効にしないのではないかと思います class Foo { class Bar { /* ... */ } def takeBar(b: Bar) = { /* ... */ } def getBar: …

1
Javaに対するOracleのコミットメントは何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 Javaに多額の投資を行っていますが、最近の経験とその質問に対するJoonasの回答を読んだ後: Java 6でこれらのフラグを使用した場合、クラッシュだけでなく、6u19から6u20へのマイナーアップグレード(おおよそ)のために、ループの誤った実行、つまり計算ミスが発生する可能性があります。 ...そして、注目すべきJava 7の問題に関する関連ブログ投稿により、Javaの品質が進むことを心配するようになりました。 これらの問題はOracleによって対処されていますか?Javaが将来十分にサポートされるようにするために、オラクルはどのような保証を提供しましたか?
15 java  oracle 

5
条件式でビット演算子を使用するのが適切な場合
まず、いくつかのバックグラウンド:私はトレーニング中のIT教師であり、10年生のクラスにjavaのブール演算子を導入しようとしています。教師と指導者は、準備したワークシートを確認し、単一の&または|を使用できるとコメントしました。「同じことをする」ため、演算子を示します。 &と&&の違いを認識しています。 &は、整数間の使用を目的としたビット単位の演算子で、「ビットトゥイドリング」を実行します。 &&は、ブール値間で使用するための条件演算子です。 これらの演算子が常に「同じことをする」わけではないという点を証明するために、ブール値間でビット単位を使用するとエラーが発生する例を見つけました。この例を見つけました boolean bitwise; boolean conditional; int i=10, j=12; bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3 System.out.println(bitwise+ " "+ i); i=10; conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10 System.out.println(conditional+ " "+ i); …

2
ホットスワップと代替手段?
私の大学生活の初期から、私はJavaを使用してきましたが、私たちが抱えている最大の問題は、他の通訳言語よりも生産性が絶対に低いことです。すべての人々は、javaが最高のコンパイル言語の1つであることを確信しています。 ただし、SunもOracleもこの問題を解決するために十分な努力をしていません。もちろん、問題の1つはクラスのリロードです。 この問題を解決するためのコミュニティからの最新の試みは、DaVinci Hotswapプロジェクト、JRebel、PlayFrameworkです。ただし、この記事の執筆時点では、まだ成熟しておらず(ネイティブ)でした。それらの一部はエンタープライズ対応ではなく、一部はすべてのIDEと互換性がなく、一部は未熟な大学プロジェクトです。ロードマップ、さらには開発者向けのJavaの準備は整っていますが、Javaコミュニティには、オンザフライでクラスをリロードするためのソリューションがまだありません。 Oracleがこの問題を解決するために努力することはそれほど難しいですか?クラスの再読み込みがネイティブにまだ実装されていないのはなぜですか?
15 java 

8
組織をJavaからScalaに移行することをどのように奨励しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 誰かの組織がJavaからScalaへの移行を始めましたか?はいの場合、どのようにそれを行いますか?同僚に同じことを勧めるにはどうすればよいですか?
15 java  scala  migration 

2
データ検証:分離されたクラスかどうか
検証が必要なデータが大量にある場合、検証のみを目的として新しいクラスを作成する必要がありますか、またはメソッド内検証に固執する必要がありますか? 私の特定の例では、トーナメントやイベント/カテゴリクラス企図:TournamentとEvent、モデルのスポーツ大会や各トーナメントは、1つのまたは多数のカテゴリがあります。 これらのクラスで検証するすべての種類のものがあります:プレイヤーは空である必要があり、一意である必要があり、各プレイヤーがプレイするマッチの数、各マッチが持っているプレイヤーの数、事前に定義されたマッチアップ、およびはるかに大きいなど複雑なルール。 また、クラスを相互に統合する方法など、全体として検証する必要のある部分もあります。たとえば、aのユニタリ検証はPlayer問題なく実行できますが、イベントに同じプレーヤーが2回ある場合、検証エラーになります。 では、これはどうですか?:モデルクラスのセッターや同様のメソッドを使用してデータを追加するときの事前チェックを絶対に忘れて、代わりに検証クラスにそれを処理させます。 だから我々は、のようなものがありますEventValidatorとのEventメンバーとして、そしてvalidate()すべてのメンバーのルールを検証するために、オブジェクト全体を検証する方法に加え、特異な方法を。 次に、有効なオブジェクトをインスタンス化する前に、無効な値を防ぐために検証を実行します。 私の設計は正しいですか?私は何か違うことをすべきですか? また、検証メソッドを返すブール値を使用する必要がありますか?または、検証が失敗した場合に例外をスローしますか?私にとって最良のオプションは、メソッドを返すブール値であり、オブジェクトがインスタンス化されたときに例外をスローすることです、例えば: public Event() { EventValidator eventValidator = new EventValidator(this); if (!eventValidator.validate()) { // show error messages with methods defined in the validator throw new Exception(); // what type of exception would be best? should I create custom ones? } }
15 java  design  data  validation 

1
Collection.stream()。filter()。forEach()は、各ループの標準と比較して非効率ですか?
IntelliJ IDEAは、次のfor-eachループをJava 8の "forEach"呼び出しに置き換えるために、今私に勧めました: for (Object o : objects) { if (o instanceof SomeObject) { doSomething(); } } 推奨される呼び出しは次のようになります。 objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething()); Streamの基本的な機能がどのように機能するかを誤解していない限り、streamの使用は標準のfor-eachループのO(n)操作ではなくO(2n)操作であるように思われます。

3
リソースが見つからない場合、204または404応答を返す必要がありますか?
トーナメントとスケジュールのためのシンプルなRESTfulサービスを開発しています。JSONボディを含むPOSTリクエストを通じてトーナメントが作成されると、トーナメントはに挿入さBiMapれ、DAO実装で次のように宣言されます。 private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create()); トーナメントが作成されると、それに関連付けられた文字列IDが返されるので、ユーザーはそのトーナメントを将来参照することができます。彼/彼女は次のリクエストを実行して新しいトーナメントから情報を得ることができます: GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39 しかし、そのようなIDのトーナメントが見つからない場合はどうなりますか?これまでのところ、204応答を返しています。まあ、ジャージーはnull、そのメソッドの1つから戻るときに私のためにそれをやっています。これは、上記のルートに対応するメソッドです。 @Path("/{id}") @GET @Produces(MediaType.APPLICATION_JSON) public Tournament getTournament(@PathParam("id") String id) { Optional<Tournament> optTournament = tournamentDao.getTournament(id); if (optTournament.isPresent()) return optTournament.get(); return null; } 私の質問は次のとおりです。リソースが見つからなかったので、204: No Content応答を返すことは問題あり404ませんか、それとも代わりに応答でなければなりませんか? それを404に変更する必要がある場合、明らかな質問:メソッドのシグネチャを変更する必要がありますか?これで(タイプTournament)のトーナメントが返されない可能性があるため、メソッドは異なるように見えるはずです。Response代わりに、型を戻り値の型として使用する必要がありますか?
15 java  rest  web-services  http 

3
RxJavaクラスFlowableは、正当に460個のメソッドを持つことができますか?
JavaのReactiveX (RxおよびReactive Extensionsとも呼ばれます)の実装であるRxJavaを始めたばかりです。本当に私を襲った何かがの巨大な大きさだったRxJavaのフロアブルクラス:それは460個のメソッドを持っています! 公平であるために: オーバーロードされたメソッドが多数あり、メソッドの総数が大幅に増えます。 おそらくこのクラスは分割されるべきですが、RxJavaに関する私の知識と理解は非常に限られています。RxJavaを作成した人々は確かに非常にスマートであり、それらは作成するために選択するための有効な引数を、おそらくを提供することができますフロアブル剤を非常に多くの方法で。 一方: RxJavaはのJava実装であるMicrosoftの反応性の拡張機能、およびそれがさえ持っていないフロアブルクラスを、ので、これは盲目的に既存のクラスを移植し、Javaでそれを実施する場合ではありません。 [ 更新:イタリック体の前のポイントは事実正しくありません。マイクロソフトの観察可能な 400以上のメソッドを持つクラスは、RxJavaのための基礎として使用された観察可能なクラス、および流動性は、に似て観察可能な大量のデータのためではなく、ハンドル背圧。そのため、RxJavaチームは既存のクラスを移植していました。この投稿は、元のデザインに挑戦されている必要があり、観察可能マイクロソフトによってクラスではなく、RxJavaのフロアブルクラスを。] RxJavaはわずか3年以上前であるため、これは(Javaの初期リリースの場合のように)優れた(SOLID)クラス設計原則に関する知識が不足しているためにコードが誤って設計されている例ではありません。 Flowableほどの大きさのクラスでは、その設計は本質的に間違っているように見えますが、そうではないかもしれません。このSEの質問に対する1つの答えクラスメソッドの数の制限は何ですか?答えは「必要な数のメソッドを用意する」ことです。 明らかに、言語に関係なくそれらをサポートするためにかなりの数のメソッドを必要とするクラスがいくつかあります。それらは簡単に小さなものに分解されず、かなりの数の特性と属性を持っているからです。例:文字列、色、スプレッドシートセル、データベース結果セット、HTTPリクエスト。これらのことを表現するためのクラス用のメソッドをおそらく数十個用意することは、理不尽に思えません。 しかし、Flowableには460個のメソッドが本当に必要なのでしょうか、それとも非常に巨大なために、必ずしもクラスの設計が悪い例ですか? [明確にするには:この質問は、具体的RxJavaのに関し、フロアブルクラスではなく、神は、一般的にオブジェクト。]

7
単純なドメインオブジェクトを表すプリミティブvsクラス?
domain-speciifcオブジェクトとプレーンな文字列または数字を使用する場合の一般的なガイドラインまたは経験則は何ですか? 例: 年齢階級と整数? FirstNameクラスとString? UniqueID vs String PhoneNumberクラスvs文字列vs Long? DomainNameクラスとString? ほとんどのOOP実践者は、間違いなくPhoneNumberとDomainNameの特定のクラスを言うと思います。それらを有効にするものとそれらを比較する方法に関するルールが増えると、単純なクラスをより簡単かつ安全に処理できるようになります。しかし、最初の3つについては、さらに議論があります。 私は「年齢」クラスに出会ったことはありませんが、非負でなければならないので理にかなっていると主張することができます(負の年齢について議論できることはわかっていますが、プリミティブ整数とほぼ同等である良い例です)。 文字列は「名」を表すのが一般的ですが、空の文字列は有効な文字列ですが、有効な名前ではないため、完全ではありません。通常、比較は大文字小文字を無視して行われます。空のチェック、大文字と小文字を区別しない比較などを行う方法はありますが、これを行うにはコンシューマーが必要です。 答えは環境に依存しますか?私は主に、おそらく10年以上にわたって存続し、維持されるエンタープライズ/高価値ソフトウェアに関心を持っています。 おそらく私はこれを考えすぎていますが、クラスとプリミティブのどちらを選択するかについてのルールがあるかどうかを知りたいと思います。

2
Javaインターフェイスのすべてのメソッド宣言がパブリック抽象ではないため、これらの修飾子を使用してメソッドを宣言する必要がありますか?
Java 8以降、defaultメソッドがインターフェイスに導入されました。事実上、これはのすべてのメソッドがであるとinterfaceは限らないことを意味しますabstract。 Java 9(おそらく)以降、privateメソッドは許可されます。これは、のすべてのメソッドがであるとinterfaceは限らないことを意味しますpublic abstract。 「Javaインターフェイスのメソッドは、publicアクセス修飾子を付けて、または付けずに宣言する必要がありますか?」という質問 スタックオーバーフローで/programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-mで尋ねられました そこでは、ほとんどの回答はpublic abstract使用すべきではないと主張しました。なぜなら、のメソッドはinterface以外のものではないからですpublic abstract。もはやそうではありません。 インターフェースのこれらの新しい機能をpublic abstract考慮して、Javaインターフェースメソッドの宣言でキーワードを使用する必要がありますか? 私の特定の環境では、経験豊富なソフトウェアエンジニアがJavaを経験していない人がいて、Javaコードを時々読んでいます。public abstractキーワードを省略すると、インターフェースがこれらのキーワードを使用するためのさまざまなルールを持つようになった経緯に詳しくない人にとっては、さらなる混乱点が生じると思います。

1
2つのJava 8のデフォルトメソッドを相互に実装するのは良い習慣ですか?
私はこれに似た2つの関連する方法でインターフェースを設計しています: public interface ThingComputer { default Thing computeFirstThing() { return computeAllThings().get(0); } default List<Thing> computeAllThings() { return ImmutableList.of(computeFirstThing()); } } 実装の約半分で計算されるのは1つだけですが、残りの半分ではさらに多くの計算が行われます。 これは、広く使用されているJava 8コードに先例がありますか?Haskellがいくつかのタイプクラスで同様のことを行うことは知っています(Eqたとえば)。 利点は、2つの抽象クラス(SingleThingComputerおよびMultipleThingComputer)を使用した場合よりも大幅に少ないコードを記述する必要があることです。 欠点は、空の実装がコンパイルされますが、実行時にStackOverflowError。を使用して相互再帰を検出しThreadLocal、より良いエラーを与えることは可能ですが、それにより、バグのないコードにオーバーヘッドが追加されます。

3
値チェッカー関数はブール値とメッセージの両方を返す必要があります
私は、文字列で渡される値確認機能を持っています。これは、クレジットカード番号確認機能によく似ており、値が正しい形式であることを確認する必要があります。 適切な形式の場合は、trueを返す必要があります。 正しい形式でない場合は、falseを返す必要があり、値の何が問題なのかも教えてください。 問題は、これを達成する最も良い方法は何ですか? 以下にいくつかの解決策を示します。 1.整数/列挙戻りコードを使用して、意味を示します。 String[] returnCodeLookup = [ "Value contains wrong number of characters, should contain 10 characters", "Value should end with 1", "Value should be a multiple of 3" ] private int valueChecker(String value) { /*check value*/ return returnCode; } rc = checkValue(valueToBeChecked); if rc == 0 …

2
クラスはJavaで不変であることをどのように注釈する必要がありますか?
私は最近、不変オブジェクトの有用性につまずきました。たとえば、要素をコンストラクタに渡し、クラスを不変にする必要がある場合、これらの要素が不変でない場合はこれらの要素をコピーする必要があります。 これには、プロジェクトに関する多くの確認または知識が必要です。 public A(B foo) かつB不変ではない、A私はコピーする必要があるだろうB。今でBは不変のように思えますが、それ自体はコンストラクタなどに可変クラスを持っています。 Javaでクラスが不変である場合、文書化するための標準またはベストプラクティスはありますか?@immutableJavadoc にはキーワードがないようです。 @Immutable注釈は自動クラスの生成ではなく、標準のJavaの一部については全く違うもののようです。

3
オブジェクトを作成すると、インスタンスフィールドとメソッドの両方、またはインスタンスフィールドのみに新しいメモリが割り当てられます
次のクラスがあります class Student{ int rollNumber; int marks; public void setResult(int rollNumber, int marks){ this.rollNumber=rollNumber; this.marks=marks; } public void displayResult(){ System.out.println("Roll Number= "+this.rollNumber+" Marks= "+this.marks); } } 次に、次のようにStudentタイプの2つのオブジェクトを作成します Student s1=new Student(); Student s2=new Student(); これで、2つの異なるメモリセットがインスタンスフィールドに割り当てられます。今私の質問は、メモリがメソッドに割り当てられているかどうかです(setResultそしてdisplayResult)に2回または1回です。 次の図を参照してください。どの図が正しい情報を提供しているかを教えてください。

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