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

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

30
Javaが最新のWebアプリケーション開発に使用されないのはなぜですか?[閉まっている]
プロのJavaプログラマーとして、私は理解しようとしました-なぜ現代のWebアプリケーションでJavaが嫌いなのですか? 私は、現代のWebスタートアップのうち、比較的少数の割合がJavaを使用しているように見える傾向に気付きました(Javaの全体的な人気と比較して)。これについていくつか質問したところ、「Javaは情熱的に嫌いだ」というような返事を受け取りました。しかし、誰も実際に決定的な答えを出すことができないようです。 また、この同じWebスタートアップコミュニティがJava開発者を否定的に言及していることも聞いています。 結果として、私はRuby / Railsを手に入れるために時間を費やしました。しかし、主に相対的な経験レベルのために、「Javaを使用している場合、これをはるかに迅速に行うことができます」と考えることはできません。 しかし、Javaから重大な「欠落」が見られなかったため、同じアプリケーションを作成できませんでした。 それは私の質問に私をもたらします: Javaが最新のWebアプリケーションで使用されていないのはなぜですか? それは言語の弱点ですか? Javaはあまりにも長い間使用されてきたため、Javaの不公平なステレオタイプですか(古いテクノロジーと不当に関連付けられており、その「現代の」機能に対する認識がありません)。 Java開発者のネガティブなステレオタイプは強すぎますか?(Javaはもはや「クール」ではありません) 他の言語で記述されたアプリケーションは、構築が非常に速く、保守が容易で、パフォーマンスは向上していますか? Javaは、新しい言語に適応するには遅すぎる大企業でのみ使用されていますか?

16
Grokking Java culture-なぜそんなに重いのですか?何のために最適化されますか?[閉まっている]
私はよくPythonでコーディングしていました。今、仕事上の理由で、私はJavaでコーディングしています。私がやるプロジェクトはかなり小さく、おそらくPythonのほうがうまくいくかもしれませんが、Javaを使用する正当な非エンジニアリングの理由があります(詳細は説明できません)。 Java構文は問題ありません。それは単なる別の言語です。しかし、構文とは別に、Javaには文化、一連の開発メソッド、および「正しい」と見なされるプラクティスがあります。そして今のところ、私はその文化を「グロック」することに完全に失敗しています。だから私は本当に正しい方向に説明やポインタをいただければ幸いです。 最小限の完全な例は、私が始めたStack Overflowの質問にあります:https : //stackoverflow.com/questions/43619566/returning-a-result-with-several-values-the-java-way/43620339 タスクがあります-(単一の文字列から)解析し、3つの値のセットを処理します。Pythonでは1行(タプル)、PascalまたはCでは5行のレコード/構造体です。 答えによると、構造体に相当するものはJava構文で利用可能であり、トリプルは広く使用されているApacheライブラリで利用可能です。しかし、それを行う「正しい」方法は、ゲッターとセッター。完全な例を提供してくれた人はとても親切でした。それは47行のコードでした(これらの行の一部は空白でした)。 巨大な開発コミュニティは「間違った」ものではないことを理解しています。これは私の理解の問題です。 Pythonのプラクティスは、読みやすさ(その哲学では保守性につながります)とその後の開発速度を最適化します。Cプラクティスは、リソース使用量に対して最適化されます。Javaプラクティスは何のために最適化されますか?私の最善の推測はスケーラビリティです(すべてが数百万のLOCプロジェクトに対応できる状態でなければなりません)が、それは非常に弱い推測です。

14
Javaでのオブジェクト作成を避けるべきですか?
同僚から、Javaオブジェクトの作成は実行できる最も高価な操作であると言われました。したがって、できる限り少ないオブジェクトを作成することしかできません。 これは、オブジェクト指向プログラミングの目的をやや損なうようです。オブジェクトを作成していない場合、最適化のために1つの長いクラスCスタイルを記述しているだけですか?

7
Springフレームワークは何をしますか?使用すべきですか?なぜですか?
そのため、私はJavaで新しいプロジェクトを開始し、Springの使用を検討しています。なぜ春を検討するのですか?多くの人が私にSpringを使うべきだと言っているからです!真剣に、私は人々にSpringが何であるか、それが何であるかを説明するように試みたときはいつでも、彼らは私にまっすぐな答えを与えることはできません。SpringSourceサイトでイントロを確認しましたが、それらは非常に複雑であるか、本当にチュートリアルに焦点を当てています。いずれも、私がそれを使用する理由、またはそれが私の生活を楽にする方法について良いアイデアを与えてくれません。時々、人々は「依存性注入」という用語をまき散らしますが、これは私をさらに混乱させるだけです。なぜなら、その用語の意味が違うと思うからです。 とにかく、私の背景とアプリについて少し説明します。 しばらくJavaで開発しており、バックエンドWeb開発を行っています。はい、私は大量の単体テストを行っています。これを容易にするために、私は通常、(少なくとも)2つのバージョンのメソッドを作成します。1つはインスタンス変数を使用し、もう1つはメソッドに渡される変数のみを使用します。インスタンス変数を使用する方は、もう一方を呼び出して、インスタンス変数を提供します。単体テストの時間になると、Mockitoを使用してオブジェクトをモックアップし、インスタンス変数を使用しないメソッドを呼び出します。これは私が常に「依存性注入」であると理解してきたことです。 私のアプリは、CSの観点からは非常にシンプルです。小規模なプロジェクト、1〜2人の開発者。主にCRUDタイプの操作で、大量の検索がスローされます。基本的には、一連のRESTful Webサービスに加えて、Webフロントエンド、そして最終的には一部のモバイルクライアントです。フロントエンドをストレートHTML / CSS / JS / JQueryで行うことを考えているので、JSPを使用する予定はありません。HibernateをORMとして使用し、Jerseyを使用してWebサービスを実装します。 私はすでにコーディングを始めており、デモを手に入れたいと思っています。したがって、明らかに時間が重要です。Springには学習曲線がかなりあることを理解していますが、それに加えて、多くのXML構成が必要なように見えますが、通常はペストのように避けるようにしています。しかし、それが私の生活を楽にすることができ、そして(特に)それが開発とテストをより速くすることができるなら、私は弾丸を噛んで春を学ぼうと思っています。 だからお願い。私を教育してください。Springを使用する必要がありますか?なぜですか?

6
Gitリポジトリ内の単一または複数のプロジェクトを選択しますか?
gitほとんどのプロジェクトをモジュール化した環境では、リポジトリごとに1つのプロジェクト、またはリポジトリ設計の問題ごとに複数のプロジェクトに直面しています。モジュール化されたプロジェクトを考えてみましょう。 myProject/ +-- gui +-- core +-- api +-- implA +-- implB 現在、リポジトリごとに1つのプロジェクトがあります。それは自由を与えます release 個々のコンポーネント tag 個々のコンポーネント しかしbranch、多くの場合、分岐にapiはの同等の分岐が必要coreであり、おそらく他のコンポーネントも必要であるため、コンポーネントにとっても面倒です。 releaseコンポーネントを個別にしたい場合でも、リポジトリ設計ごとに複数のプロジェクトを利用することで、同様の柔軟性を得ることができます。 どのような経験があり、これらの問題にどのように/なぜ対処しましたか?

6
Haskell型システムをこれほどまでに尊敬する理由は何ですか(たとえば、Java)。
私はHaskellを学び始めています。私は非常に新しいので、基本的な構成を理解するために、オンラインブックを数冊読んでいます。 よく知っている「ミーム」の1つは、「コンパイルすれば機能します*」というもの全体です。これは型システムの強さに関係していると思います。 この点で、Haskellが他の静的に型付けされた言語より正確に優れている理由を理解しようとしています。 別の言い方をすれば、Javaでは、ArrayList<String>()実際にあるべきものを含めるために、埋めるような凶悪なことを行うことができると思い ますArrayList<Animal>()。ここでは凶悪な事はあなたがいることであるstring含まれているelephant, giraffeなどと、誰かが中に入れた場合Mercedes-あなたのコンパイラは、あなたを助けにはなりません。 私は場合はやったんArrayList<Animal>()私は私のプログラムは、それが車についてです、動物については本当にないことにした場合、時間内にいくつかの後の時点で、その後、私は、たとえば、生産機能に変更することができますArrayList<Animal>生成することをArrayList<Vehicle>、私のIDEがどこでも私に教えてくださいコンパイルの中断です。 私の推測では、これは人々が強力な型システムによって意味するものですが、Haskellの方が優れている理由は私には明らかではありません。別の言い方をすれば、良いJavaまたは悪いJavaを書くことができます。Haskellでも同じことができると思います(つまり、実際にファーストクラスのデータ型であるはずの文字列/ intに詰め込みます)。 重要/基本的なものが不足していると思われます。 私のやり方の間違いを見せていただければ幸いです!

30
私のお父さんは、私のプログラム学習のペースに焦りを感じています。私は何をしますか?[閉まっている]
だから、お父さんは約1か月前にプログラミングに関する5冊の本(C ++、Java、PHP、Javascript、Android)を購入しました。彼は建築家であり、プログラミングについて何も知らない。プログラミングが楽しいと教えて、それを学びたいと思ったので、彼は私にそれらを買った。 ご存知かもしれませんが、子供(14歳)であり、退屈な本からプログラミングを学ぶように言われるのは簡単なことではありません。私はいつも気を散らしている..以前に本を買う必要がなく、オンラインのチュートリアルを見ることができると彼に言った。しかし、彼はとても古臭い。彼は私に本を使わせているだけです。 最近、彼は私がそれで何をしたかを尋ね始めました、そして私は彼にあなたが入力したものを取り、各文字に値を割り当てるC ++プログラムを見せました(Aはアルファベットの最初の文字なので値を取得します1)..などなど。次に、すべての値を合計して通知します。したがって、「追加」という単語の値は9になります。 ^^それは彼にとってあまり印象的ではなかった。彼は私に怒鳴りつけて、私がやってきたことのすべてがうんざりしていると言った。それは真実ではない。彼は非常に伝統的で頑固で、私が言わなければならないことは何も聞きません。彼に何を言えばいいですか? PS:本のゾーニングに関するヒントがあれば、教えてください 編集:どうもありがとう、私の状況を理解している人がいることを知っていることの意味がわかりません。私はすべてを読んだので、みんなの意見を検討します。¡グラシアス!
200 java  learning  c++ 


16
ゲッターとセッターはいつ正当化されるのか
ゲッターとセッターは、適切なオブジェクト指向ではないとしばしば批判されます。一方、私が見たほとんどのオブジェクト指向コードには、広範なゲッターとセッターがあります。 ゲッターとセッターはいつ正当化されますか?それらの使用を避けようとしていますか?それらは一般的に使い古されていますか? お気に入りの言語にプロパティがある場合(私の場合)、そのようなものもこの質問のゲッターおよびセッターと見なされます。オブジェクト指向の方法論の観点からは同じです。より良い構文を持っています。 Getter / Setter Criticismの情報源(コメントを見やすくするためにコメントから引用したものもあります): http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html http://typicalprogrammer.com/?p=23 http://c2.com/cgi/wiki?AccessorsAreEvil http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html 批判を簡単に述べると、ゲッターとセッターを使用すると、オブジェクトの外部からオブジェクトの内部状態を操作できます。これはカプセル化に違反します。オブジェクト自体のみがその内部状態に注意する必要があります。 そして、コードの手続きバージョンの例。 struct Fridge { int cheese; } void go_shopping(Fridge fridge) { fridge.cheese += 5; } コードのミューテーターバージョン: class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } …

10
「はい、.NETはクロスプラットフォームです」と言うのによく使われます。その主張はどの程度有効ですか?[閉まっている]
では何がこの時点で、.NETとJava間のプロジェクトのために選びますか?「常にWindowsに展開しますか?」を検討すると言います。新しいWebプロジェクトで先行するための単一の最も重要な技術的決定であり、答えが「いいえ」であれば、.NETではなくJavaをお勧めします。 非常に一般的な反論は、「Linux / OS X / Whateverで実行したい場合は、Monoを実行するだけです」1です。これは表面的には非常に説得力のある議論ですが、理由。 OpenJDKとすべてのベンダーが提供するJVMは、Sun Sunの公式TCKに合格し、正常に機能することを確認しています。MonoがMicrosoft TCKを渡すことを知りません。 Monoは.NETリリースを追跡します。現在、どの.NETレベルが完全にサポートされていますか? すべてのGUI要素(WinForms?)はMonoで正しく機能しますか? 企業は、公式計画Bとしてオープンソースフレームワークに依存したくない場合があります。 オラクルによるJavaの新しいガバナンスでは、将来は安全ではないことを認識していますが、たとえばIBMは Linuxを含む多くのプラットフォームにJDKを提供しています。それらはオープンソースではありません。 では、Monoはどのような状況で.NETアプリケーションの有効なビジネス戦略ですか? 1 マーク・Hは、としてそれをまとめた「主張があることである場合:『私は.NETで書かれたWindowsアプリケーションを持っている』、それはモノで実行する必要があり、その後ではない、それは有効な請求ではありません-しかしモノは、このようなアプリケーションを移植作るための努力をしていますよりシンプルです。」
168 java  .net  mono 

15
Java、Javascript、C#などのメモリ管理言語が「new」キーワードを保持しているのはなぜですか?
newJava、Javascript、C#などの言語のキーワードは、クラスの新しいインスタンスを作成します。 この構文は、C ++から継承されているようです。C++ newは、ヒープ上のクラスの新しいインスタンスを割り当て、新しいインスタンスへのポインターを返すために特に使用されます。C ++では、これがオブジェクトを構築する唯一の方法ではありません。new- を使用せずにスタック上にオブジェクトを作成することもできます。実際、この方法のオブジェクトの作成方法はC ++でより一般的です。 だから、C ++のバックグラウンドから来て、newJava、Javascript、C#のような言語のキーワードは、私にとって自然で明白なように思えました。それから、newキーワードのないPythonを学び始めました。Pythonでは、次のように、コンストラクターを呼び出すだけでインスタンスが構築されます。 f = Foo() 最初は、Pythonが持つ理由がないことに気付くまで、これは少しnew戸惑いました。すべてがオブジェクトであるため、さまざまなコンストラクタ構文を明確にする必要はありません。 しかし、それから私は考えました-Javaの本当のポイントは何newですか?なんで言うのObject o = new Object();?どうしてObject o = Object();?C ++ではnew、ヒープへの割り当てとスタックへの割り当てを区別する必要があるため、間違いなくが必要ですが、Javaではすべてのオブジェクトがヒープ上に構築されますnew。Javascriptについても同じ質問をすることができます。私があまり馴染みのないC#では、newオブジェクト型と値型を区別するという点で何らかの目的があると思いますが、よくわかりません。 とにかく、C ++の後に来た多くの言語は単にnewキーワードを「継承」しているように思えます-本当にそれを必要としません。それはほとんど痕跡のキーワードのようなものです。なんらかの理由でそれを必要としているようには見えませんが、まだあります。 質問:これについて正しいですか?あるいはnew、Java、Javascript、C#などのC ++にインスパイアされたメモリ管理言語である必要があり、Pythonではなくてはならない説得力のある理由がありますか?


6
Java 8に不変のコレクションが含まれないのはなぜですか?
Javaチームは、Java 8の関数型プログラミングの障壁を取り除くために多大な努力をしてきました。特に、java.utilコレクションの変更は、変換を非常に高速なストリーム操作に連鎖させるという素晴らしい仕事をしています。彼らがコレクションにファーストクラスの関数と機能メソッドを追加するのをどれだけうまくやったかを考えると、なぜ彼らは不変のコレクションや不変のコレクションのインターフェースを提供することに完全に失敗したのでしょうか? 既存のコードを変更せずに、Javaチームはいつでも変更可能なインターフェイスと同じ不変インターフェイスを追加し、「set」メソッドを削除して、既存のインターフェイスを次のように拡張できます。 ImmutableIterable ____________/ | / | Iterable ImmutableCollection | _______/ / \ \___________ | / / \ \ Collection ImmutableList ImmutableSet ImmutableMap ... \ \ \_________|______________|__________ | \ \___________|____________ | \ | \___________ | \ | \ | List Set Map ... 確かに、List.add()やMap.put()などの操作は現在、指定されたキーのブール値または前の値を返し、操作が成功したか失敗したかを示します。不変のコレクションは、そのようなメソッドをファクトリーとして扱い、追加された要素を含む新しいコレクションを返す必要があります-これは現在の署名と互換性がありません。ただし、ImmutableList.append()または.addAt()およびImmutableMap.putEntry()などの別のメソッド名を使用することで回避できます。結果として得られる冗長性は、不変のコレクションを操作する利点よりも重要であり、型システムは間違ったメソッドを呼び出すエラーを防ぎます。時間が経つにつれて、古いメソッドは廃止される可能性があります。 不変コレクションの勝利: シンプルさ-基礎となるデータが変更されない場合、コードについての推論は簡単です。 ドキュメンテーション-メソッドが不変のコレクションインターフェイスを取る場合、そのコレクションを変更しないことを知っています。メソッドが不変のコレクションを返す場合、変更できないことを知っています。 並行性-不変コレクションはスレッド間で安全に共有できます。 不変性を前提とする言語を味わった人として、Wild延する突然変異のワイルドウエストに戻ることは非常に困難です。Clojureのコレクション(シーケンス抽象化)には、Java …

11
C ++はJITを使用したJVMまたはCLRよりも高速であるという主張を裏付けるものは何ですか?[閉まっている]
多くの質問で気づいたSEの繰り返しのテーマは、C ++がJavaのような高レベル言語よりも高速で効率的であるという継続的な議論です。反論は、最近のJVMまたはCLRは、増加するタスクのJITなどのおかげで同じように効率的であり、C ++ は、あなたが何をしていて、なぜ特定の方法で物事をしているのかを知っている場合にのみ効率的であるということですパフォーマンスの向上に値します。それは明らかであり、完全に理にかなっています。 JVMやCLRよりもC ++で特定のタスクが高速である理由と方法についての基本的な説明(そのようなことがある場合)を知りたいのですが?JVMまたはCLRが実行時にJITコンパイルの処理オーバーヘッドをまだ持っているのに対して、C ++がマシンコードにコンパイルされているからでしょうか? トピックを調査しようとすると、C ++が高性能コンピューティングにどのように利用できるかを正確に理解することに関する詳細な情報なしで、上で概説したのと同じ議論だけを見つけます。
119 java  c++  performance  jit 

10
従来のヌルポインターチェックの代わりにJava 8以降でOptionalを使用する理由
最近、Java 8に移行しました。今、アプリケーションがOptionalオブジェクトであふれていることがわかります。 Java 8(スタイル1)より前 Employee employee = employeeServive.getEmployee(); if(employee!=null){ System.out.println(employee.getId()); } Java 8(スタイル2)の後 Optional<Employee> employeeOptional = Optional.ofNullable(employeeService.getEmployee()); if(employeeOptional.isPresent()){ Employee employee = employeeOptional.get(); System.out.println(employee.getId()); } Optional<Employee> employeeOptional = employeeService.getEmployee();サービス自体がオプションを返すときの付加価値はありません: Java 6のバックグラウンドから来た私は、スタイル1がより明確で、コードの行が少ないと考えています。ここに欠けている本当の利点はありますか? すべての回答からの理解とブログでのさらなる調査から統合
110 java  java8 

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