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

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

2
Java 8 Streamインスタンスは常にclose() 'dすべきですか?
quothがJavadocを: ストリームにはBaseStream.close()メソッドがあり、AutoCloseableを実装していますが、ほとんどすべてのストリームインスタンスを実際に使用後に閉じる必要はありません。通常、ソースがIOチャネル(Files.lines(Path、Charset)によって返されるものなど)であるストリームのみを閉じる必要があります。ほとんどのストリームは、特別なリソース管理を必要としないコレクション、配列、または生成関数によって支援されます。(ストリームを閉じる必要がある場合、try-with-resourcesステートメントでリソースとして宣言できます。) 「ほぼすべて」と「一般に」はあいまいです-ライブラリを作成していて、そのストリームのユーザーからストリームのソースを抽象化している場合は、とにかく自分に質問する必要があります-「閉じる必要がありますこの?" 端末操作はを呼び出さないため、IOがサポートするストリームを閉じる必要がありますclose。そのため、事実上、ストリームの送信元を常に覚えておくか、常にストリームする必要がありますclose。 核となる選択肢は、メソッドからストリームを返さないか、ストリームパラメーターを受け入れないことです。これは、JDKチームの一部の人々によって反響されてきた感情です。Streamsの実用的な有用性を考えると、過度に制限されていることがわかります。 Streamsを閉じる際のベストプラクティスは何ですか?よく似たコミュニティの質問に通常積極的に参加しているJDKの人々から、これに対する答えをオンラインで探しましたが、関連するものは見つかりませんでした。
12 java  resources  java8 

2
JavaコレクションフレームワークインターフェイスのUnsupportedOperationException
Java Collections Frameworkを調べてみると、かなりの数のインターフェースにコメントがあることがわかりました(optional operation)。これらのメソッドを使用すると、クラスUnsupportedOperationExceptionを実装したくない場合にクラスを実装できます。 この例は、のaddAllメソッドSet Interfaceです。 さて、この一連の質問で述べられているように、インターフェースは、使用が期待できるものを定義する契約です。 インターフェースは、クラスが行うこととそれを行う方法を分離するため、重要です。クライアントが期待できるものを定義する契約により、開発者は契約を維持する限り、自由に実装できます。 そして インターフェースとは、オブジェクトが実行できるアクションの説明です。たとえば、ライトスイッチをオンにしたとき、ライトが点灯したとき、どのように気にせず、それを行うだけです。オブジェクト指向プログラミングでは、インターフェイスとは、オブジェクトが「X」になるために必要なすべての機能の説明です。 そして インターフェースベースのアプローチはかなり優れていると思います。その後、依存関係をうまくモックアウトできますが、基本的にはすべてがあまり密結合ではありません。 インターフェースのポイントは何ですか? インターフェイスとは何ですか? インターフェイス+拡張(mixin)vs基本クラス インターフェースの目的はコントラクトを定義し、依存関係を疎結合にすることであるため、一部のメソッドでUnsupportedOperationException目的を達成できない場合がありますか?それは私がもう渡されSetずに使うことができないことを意味しますaddAll。むしろ、どの実装Setが渡されたかを知る必要があるためaddAll、使用できるかどうかを知ることができます。それは私にはかなり価値がないようです。 それで、何のポイントUnsupportedOperationExceptionですか?従来のコードを補うだけで、インターフェースをクリーンアップする必要がありますか?それとも、私が見逃しているより感覚的な目的がありますか?

2
Javaコレクション(java.util)のパッケージ構造-Iterableがjava.langにあるのはなぜですか?
以下の図のように、interfaceを除いてIterable、残りのすべての構成要素(interface / class / abstract class)は同じパッケージにありますjava.util パッケージにIterable座っているのはなぜjava.langですか? 注:意図は、Javaプログラミングのパッケージングの側面を理解することです。

3
ユニットテストコンテスト
私の雇用主は、毎月の単体テストの日の競争を実施しています。1日は単体テストの作成に専念します。明らかに、1か月を通してより多くのテストを行いますが、これは1日であり、コンテストの「勝者」には賞が与えられます。しかし、勝者が誰であるかを判断するのは難しいと感じています。 各テストケースにポイントを割り当てていました。したがって、このような単体テストを作成した場合... for (int i = 0; i < 100; i++) { assertTrue(i*i, square(i)); } 100ポイントが与えられます。明らかにこれは単純な例ですが、各テストケースに「ポイント」を割り当てる際の問題を示しています。 私たちは主にJavaとJavascriptのショップです。そのため、テストしたコードブランチの数をメトリックとしてカウントすることをお勧めします。コードカバレッジツール(EclEmmaなど)を使用して、テストしたブランチを簡単にカウントできます。ただし、Seleniumテストでこれをどのように行い、Javascriptソースのコードカバレッジを取得するのかわかりません(アイデアはありますか?) このコンペティションの勝者をどのように決定できるかについての提案はありますか? 編集 私は単体テストの書き方を知っています。効果的な単体テストの書き方を知っています。何をテストするか決めるのに助けは必要ありません。私はこの競争をコントロールすることはできません。競争は続きます。それで、私はそれを改善するためにいくつかの入力を追加するか、テストをゲームで続けます(はい、私はそれらをゲームします。もちろんそれらをゲームします。賞品があります) 編集 この質問ここでは、明らかに重複していない、それは良いテストケースを見つける方法に関する有用な情報が含まれているものの、それが競争を評価するための任意の有用な指標を提供していません。

2
スーパータイプが期待されるサブクラスオブジェクトを引数として渡すことによるメソッドのオーバーライド
私はJavaを学んでいるだけで、実践的なプログラマーではありません。 私がフォローしている本は、メソッドをオーバーライドするとき、引数の型は同じでなければならないが、戻り値の型は多相的に互換性があると言っています。 私の質問は、オーバーライドメソッドに渡される引数が期待されるスーパータイプのサブクラスタイプになれないのはなぜですか? オーバーロードメソッドでは、オブジェクトで呼び出すメソッドはすべて、オブジェクトで定義されることが保証されています。 推奨される重複に関するメモ: 最初の提案は、クラス階層、どこの機能を置くことを約あるように思われます。私の質問は、言語制限が存在する理由に焦点を当てています。 第二の提案は、私が尋ねるが、いないよ何をする方法を説明し、なぜそれがそのように行う必要があります。私の質問はその理由に焦点を合わせています。

6
ダウンキャストを避ける方法
私の質問は、スーパークラスの動物の特別なケースについてです。 私のAnimal缶moveForward()とeat()。 Seal拡張しAnimalます。 Dog拡張しAnimalます。 そしてまた延びている特別な生き物がありますAnimalと呼ばれるがHuman。 Humanメソッドもspeak()実装しAnimalます(では実装されません)。 受け入れる抽象メソッドの実装では、メソッドAnimalを使用したいと思いspeak()ます。それはダウンキャストをしなければ不可能だと思われます。ジェレミー・ミラーは彼の記事で、ひどい臭いがすることを書いた。 この状況でダウンキャストを回避するための解決策は何ですか?

5
単純な置換でWindowsファイルパスをUnixファイルパスに変換しても安全ですか?
:だから、例えば私は、すべてのファイルのようなUNIXマシンにWindowsマシンから転送されるようにそれを持っていたと言うC:\test\myFile.txtには{somewhere}/test/myFile.txt(ドライブ文字は、この時点では関係ありません)。 現在、私たちが独自に作成したユーティリティライブラリには、すべてのバックスラッシュをスラッシュに単純に置き換えるメソッドが用意されています。 public String normalizePath(String path) { return path.replaceAll("\\", "/"); } スラッシュは予約されており、ファイル名の一部とすることはできないため、ディレクトリ構造を保持する必要があります。しかし、私が心配する必要があるかもしれないウィンドウとunixパスの間に他の複雑さがあるかどうかはわかりません(例:非ASCII名など)

4
テストされたクラスをスパイするのは悪い習慣ですか?
私はクラスの内部呼び出しが通常であるプロジェクトに取り組んでいますが、結果は何回も単純な値です。例(実際のコードではありません): public boolean findError(Set<Thing1> set1, Set<Thing2> set2) { if (!checkFirstCondition(set1, set2)) { return false; } if (!checkSecondCondition(set1, set2)) { return false; } return true; } このタイプのコードの単体テストを書くのは、実際の条件の実装ではなく、条件システムをテストするだけなので、非常に困難です。(私は別のテストでそれを行います。)実際、条件を実装する関数を渡した方が良いでしょうし、テストではモックを提供するだけです。このアプローチの問題は騒々しいです:ジェネリックを多く使用します。 実用的なソリューション。ただし、テスト対象のオブジェクトをスパイにし、内部関数の呼び出しを模擬することです。 systemUnderTest = Mockito.spy(systemUnderTest); doReturn(true).when(systemUnderTest).checkFirstCondition(....); ここでの懸念は、SUTの実装が効果的に変更されることであり、テストを実装と同期させておくことが問題になる場合があります。これは本当ですか?この内部メソッド呼び出しの混乱を避けるためのベストプラクティスはありますか? アルゴリズムの一部について説明していることに注意してください。そのため、いくつかのクラスに分割することは望ましい決定ではない場合があります。

2
JavaがC ++のようなプライベート/保護された継承をサポートしないのはなぜですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 C ++でクラスを継承している間、ユーザーは次のようなアクセス指定子を指定できます。 class Base { public int mem1; protected in mem2; }; class Derived1 : **private** Base { // mem1 will be private here. // mem2 will be private here. }; class Derived2 : **protected** Base { // mem1 will be protected here. // mem2 will be protected …

1
Java 8で関数型を削除する理由
JDK 8 Lambda Expert Group(EG)がJavaプログラミング言語に新しい関数タイプを含めないことにした理由を理解しようとしています。 メーリングリストを調べると、関数型の削除に関する議論のスレッドが見つかりました。 文の多くは私にとって曖昧です。おそらくコンテキストがないためであり、場合によっては型システムの実装に関する知識が限られているためです。 ただし、このサイトで安全に定式化できると思われるいくつかの質問があり、それらの意味をよりよく理解するのに役立ちます。 メーリングリストで質問をすることはできますが、スレッドは古く、すべての決定がすでに下されているので、私は無視される可能性があります。とりわけ、これらの人がすでに計画で遅れていることがわかります。 関数型の削除をサポートし、SAM型の使用を推奨するという彼の答えで、Brian Goetzは次のように述べています。 具体化なし。関数型を具体化することの有用性について長いスレッドがありました。具体化しないと、関数の型はぐらついています。 彼が言及しているスレッドが見つかりませんでした。今、私は、構造関数型の導入がJavaのほとんど名義型システムに特定の複雑さを暗示しているかもしれないことを理解できます。理解できないのは、具体化されたSAM型の具体化の違いです。 彼らは両方とも同じ具体化の問題の対象ではありませんか?関数型が具体化の観点からパラメータ化されたSAM型とどのように異なるかを誰もが理解していますか? 別のコメントで、ゲッツは次のように述べています。 タイピングには、名義型と構造型の2つの基本的なアプローチがあります。名義のアイデンティティはその名前に基づいています。構造型のアイデンティティは、それが構成されているものに基づいています(「int、intのタプル」または「intからfloatへの関数」など)。ほとんどの言語は、ほとんど名義的またはほとんど構造的です。「辺り」を除いて、名義型と構造型をうまく組み合わせた言語は多くありません。Javaはほぼ完全に名義です(いくつかの例外を除きます:配列は構造型ですが、下部には常に名義要素型があります;ジェネリックには名義型と構造型も混在しており、これは実際には多くのソースの一部ですジェネリックに関する人々の苦情の報告。)構造型システム(関数型)をJavaに移植する s名義型システムは、新しい複雑さとエッジケースを意味します。関数型の利点はこれだけの価値がありますか? 型システムの実装の経験がある方。彼がここで言及しているこれらの複雑さやエッジケースの例を知っていますか? 正直に言って、JVMに完全に基づいているScalaのようなプログラミング言語が、基盤となるプラットフォームの具体化の問題があっても、関数やタプルなどの構造型をサポートしていると考えると、これらの申し立てに混乱します。 誤解しないでください。関数型はSAM型よりも優れているべきだと言っているのではありません。彼らがこの決定をした理由を理解したいだけです。

10
可変変数を使用せずに有用なJavaプログラムを作成する方法
私は読んでいた関数型プログラミングについての記事をどこライター状態 (take 25 (squares-of (integers))) 変数がないことに注意してください。実際、3つの関数と1つの定数しかありません。変数を使用せずにJavaで整数の2乗を書いてみてください。おそらく、それを行う方法はありますが、それは確かに自然なことではなく、上記の私のプログラムほど読みやすくはありません。 Javaでこれを達成することは可能ですか?最初の15個の整数の2乗を出力する必要がある場合、変数を使用せずにforループまたはwhileループを記述できますか? Mod通知 この質問は、コードゴルフコンテストではありません。関係する概念を説明する(理想的には以前の回答を繰り返さずに)答えを探しています。さらに別のコードだけではありません。

2
Javaの同時実行性に関するこれらの高度/不公平なインタビューの質問はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 以下は、Javaの並行性を知っていると言っているインタビュー対象者に最近尋ねた質問です。 「メモリの可視性」の危険性-JVMがモニターによって保護されておらず宣言されていない変数に対する特定の操作を並べ替える方法volatile。1つのスレッドが別のスレッドによる変更を認識できないようにする方法。通常、このハザードが存在する場所にコードNoVisibilityを表示し(例:Goetz et alの「Java Concurrency in Practice」のリスト3.1 の例)、何が問題なのかを尋ねることでこれを要求します。 volatile宣言された実際の変数だけでなく、変数がvolatile変更する前にスレッドによって行われた変数への変更にも影響することを説明しvolatileます。 なぜvolatile代わりに使用するのsynchronizedでしょうか? wait()およびで条件変数を実装しますnotifyAll()。を使用する理由を説明しますnotifyAll()。条件変数をwhileループでテストする必要がある理由を説明します。 私の質問は-これらは適切であるか、Javaの並行性を知っていると言う人に尋ねるには高度すぎるのでしょうか? そして、私たちがそれに取り組んでいる間、Javaの並行性で働いている誰かがJavaガベージコレクションの平均以上の知識を持っていると期待されるべきだと思いますか?

7
再帰関数に反復/ループを含めることはできますか?
私は再帰関数について研究してきましたが、明らかに、それらは自分自身を呼び出す関数であり、反復/ループを使用しません(そうでなければ、再帰関数ではありません)。 しかし、例(8クイーンの再帰問題)のためにWebをサーフィンしているときに、この関数が見つかりました。 private boolean placeQueen(int rows, int queens, int n) { boolean result = false; if (row < n) { while ((queens[row] < n - 1) && !result) { queens[row]++; if (verify(row,queens,n)) { ok = placeQueen(row + 1,queens,n); } } if (!result) { queens[row] = -1; } }else{ result = …
12 java  recursion 

2
Javaプロジェクトの分離
大規模なJavaプロジェクトがあり、ビルドサイクルにmavenを使用しています。この1つのプロジェクトは広く使用されています-他のプロジェクト、さまざまなアプリケーション、その中に含まれているものと他の場所にあるもの...正直に言うと、それはちょっとした混乱です目的)、そして私はそれを少しきれいにしたいと思います。また、完全にはテストされていません(適切なユニットおよび統合テストなしで多くのビットが追加されています)。実行に時間がかかるか、実際に合格しないテストがいくつかあります...(uh-oh)-そうテストはMavenビルドサイクルでオフに切り替えられます(繰り返しますが)。 「最終」サブプロジェクト(または複数のサブプロジェクト)が必要とするさまざまなサブプロジェクトを選択できるように、この大きなプロジェクトを小さな特定のプロジェクトに分割することを考えています。 私の考えは次のとおりです。 大きなプロジェクトをさまざまなサブプロジェクトに分けると、各プロジェクトの責任が明確になります。 サブプロジェクトに分けることで、各サブプロジェクトのテストを個別にクリーンアップし、Mavenビルドサイクルでそのサブプロジェクトのテストを有効にできます。 これがビルド時間に与える影響について少し懸念しています。 大きなプロジェクトに構造を課す(つまり、小さなサブプロジェクトに入れる)と、コンパイラの速度が低下しますか? また、IDEでの編集時間にどのような影響があるかも少し懸念しています(主にIntellijを使用しています)。Intellijは依存関係ツリーを介して各プロジェクトを順番にビルドするようです。つまり、CがBに依存し、Aに依存し、Aを変更すると、Aがコンパイルしない限りBをビルドしようとしません。おそらくそれは有利ですが、たとえば、BおよびCで広く使用されているAのインターフェイスを変更すると、その変更によるすべてのエラーを修正するのに時間がかかることがわかりました... もう1つの質問は、ファクトリクラスの使用方法です。プロジェクトの一部の側面は外部jarに依存しています。時折(ありがたいことに頻繁に)これらは更新され、移行する必要があります。外部コードの正しいバージョンを指すFactoryクラスを使用してこれを処理する傾向があります(したがって、コードベース全体のすべての実装を変更する必要はありません)。 現時点ではこれはすべて大規模なプロジェクトですが、サブプロジェクトに切り替えることで、新しい外部コードを実装するための新しいプロジェクトを開発し、サブプロジェクトが完全に機能し、テストされていることを確認できます。次に、ユーザープロジェクトの依存関係/ファクトリクラスを切り替えます。ただし、大規模なプロジェクト全体でインターフェイスを広範囲に使用するため、これはより複雑になります。例えば サブプロジェクトA-インターフェースを含む サブプロジェクトB-インターフェースと古い外部jarはAに依存 サブプロジェクトC-B(およびAおよび古い外部jar)に依存し、Bのインターフェース実装を使用するFactoryクラスを含む Bの外部jarを変更する必要がある場合、次のことができます。 サブプロジェクトB_iiの作成-再びAに依存し、新しい外部jar 完全に機能したら、Cの依存関係をB_iiに追加し、インターフェイスの新しい実装を使用するようにFactoryクラスを変更できます。 すべてが機能したら、Cの元のBへの依存関係を削除し、必要に応じてサブプロジェクトBを削除できます。 これは賢明な方法ですか? だから、一般的に、私の質問は次のとおりです。 大規模なプロジェクトを解体した経験はありますか?共有したいと思うヒント/トリックはありますか? これは開発およびビルド時間にどのような影響を与えましたか? このようなプロジェクトのこのような分裂を構造化する上で、どのようなアドバイスを提供できますか?

8
メイクファイルを学ぶことはどれほど重要ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は主に趣味としてc ++で働いています(私はまだ学校にいるので、実際の仕事はありません)。IDEは私のためにメイクファイルを生成するので、それを自分で作る方法を学ぶ価値があるかどうか疑問に思っています。「価値のある学習」とは、C ++を学習し続ける前に、すべてを落とし、それらの書き方を学ぶ必要があるということです。それらを学ぶことは本当に必要になるでしょうか?もしそうなら、それらについて(一般的な構文とそれらがどのように機能するかを理解するなど)学ぶべきか、実際にそれらを書く方法を学ぶべきですか?
12 java  learning  c++  syntax  make 

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