私は新年のパフォーマンス目標を考え出しています。コードベースのサイズを縮小するという目標、特に定型文を作成するのは面白いと思いました。私がこれに対処するために打ち出した1つのアクションは、Project Lombokを使用してBeanを必要なだけ短くすることです。しかし、私は新しいソフトウェアやアプローチの欠点を見落とす習慣があるので、Stack Overflowコミュニティに頼っています。なぜ誰かがロンボクが悪い考えであると言うことができますか?プロジェクトロンボクのリスクは何ですか?
答えて
主な欠点はIDEのサポートです。 Lombokは実際には言語の変更ではないので、あなたのIDEはjavaだけを理解しているので、正しい動作をするにはLombokをサポートするIDEが必要です。現時点では、は、EclipseとIntelliJを含むEclipseのみです。もしあなたがeclipseを使っていればOKかもしれませんが、あなたは将来の開発者のための決定をしていることを覚えておいてください。
私はあなたのコードのいくつかをgroovyのようなあまり儀式的な言語に動かすことを検討することをお勧めします。私たちはビジネスロジックとモデルのいくつかをグルーヴィーに移して成功し、本当にスムーズに動作します。
ロンボクのようなものの潜在的な欠点は、setter/gettersが "missing"の場合、ソースツールは "bean"品質を与える結果オブジェクトの側面を "認識"できないことです。クラス。
もう一つの欠点は、ツールチェーン内にもう一つの「黒い魔法」があることです。幸いにも、それはかなり良質な部分(私はそれを使用していない)と思われ、実行時ではなくコンパイル時に起こるという事実は実際には祝福(IMHO)です。しかし、コードベースにアーティファクトを追加しているので、プロジェクトなしでコードを再利用したり共有したりすることはできません。だから、コンパイルされたクラスファイルは "POJO"かもしれませんが、私はあなたのソースコードがPOJOではないと主張します。
これらのどちらも、欠点を克服するものではなく、むしろ楽しみにしている側面です。
バニラクラスを取得するには、http://projectlombok.org/features/delombok.htmlを使用することができます。 – maaartinus
ロンボクの制限は、それがJavaコンパイラに密接に関連しているという事実です。注釈プロセッサAPIは、コンパイル中に新しいファイルの作成のみが可能であり(既存ファイルの変更ではないため)、lombokはそのAPIをエントリポイントとしてJavaコンパイラを変更するために使用します。残念なことに、コンパイラのこれらの変更は非公開のAPIを多用しています。ロンボクを使用することは良いアイデアかもしれませんが、あなたのコンパイラをアップグレードすることがあなたのコードを壊すかもしれないことに注意する必要があります。確率は低いですが、非公開のAPIを使用するといつも不快に感じます。
非常に良い点。 Java 8 + Lombokの歴史は、これが問題になる可能性があることを示しました。 –
別の回答でユーザー@Jcsさんから指摘されているように、私はさらに追加したいと思います。
mvn generate-sourcesコマンドを使用してコードがコンパイルされる前にmapperクラスを生成するために使用されるmapstructを使用しています。これはmavenプロセッサプラグインを使用してプロセスフェーズで実行されます。
プロジェクトlombokは、コンパイル時にクラスファイルのgetter/setterにバイトコードを追加します。
コンパイル前にプロセスフェーズが実行されているため、クラスで使用できるゲッタ/セッタがないことがわかります。
コンパイルフェーズを複数実行するための回避策がいくつかあります。 詳細はgit hub ticketをご覧ください。
注:私は春でSTSのIDEを使用していますが、それはロンボクによってサポートされている:)
これは、サードパーティのライブラリだし、それをよく知らない開発者があります。
IDEは注釈の処理(IDEAとEclipse用のプラグインがあります)をサポートする必要があります。
上記のとおり、コードにはゲッター/セッターがありません。ソナー/チェックスタイルの違反につながります。
「Java + Lombok」のソースコードはJavaソースコードではありません。何年も前にボーランドのBorland C++ Builder IDEでVCL用に作ったのと同じようなものです。C++コードに「プロパティ」を導入して、C++ではない新しいプログラミング言語を効果的に導入しました。 C++言語の標準)。 「Java + Lombok」を使用するソースは、Java言語仕様の意味では有効なソースではありません。さらに、アノテーションは言語の意味に影響を与えるようには設計されていなかったと思います。
- 1. Rattle Rパッケージ:リスクとウェイトの違いは何ですか?
- 2. データを使用するリスクは何ですか?image/jpeg; base64?
- 3. UnsafeMutablePointer <UInt8>:リスクとは何ですか?
- 4. javascriptのfacebookユーザーアクセストークンを公開する際のセキュリティ上のリスクは何ですか?
- 5. PL/Pythonを使用する際のセキュリティ上のリスクは何ですか?
- 6. レプリケートされたmysql構造内のRENAME TABLEのリスクは何ですか?
- 7. プロジェクトロンボク - 値の注釈:@Getterを抑制することは可能ですか?
- 8. RWXメモリページのリスク
- 9. なぜCORSによってオーディオファイル(MP3)がブロックされていますか?セキュリティ上のリスクは何ですか?
- 10. 表示可能な.gitフォルダはセキュリティ上のリスクですか?
- 11. 安心して管理領域を実装するためのセキュリティ上のリスクとは何ですか?
- 12. 到着Webhooksのリスク?
- 13. list「リスク」ダイスゲームのインデックスエラー
- 14. Postgres Highのプリンシパル・リスク
- 15. Javaでvarargsを使ってジェネリックアレイを作成する潜在的なリスクは何ですか?
- 16. リスク管理
- 17. Django SECRET_KEYリスク
- 18. セッションでユーザー定義の値がセキュリティ上のリスクですか?
- 19. javascriptの「偽のプライバシー」はセキュリティ上のリスクを伴いますか?
- 20. SharePointのストリーミングメディアはパフォーマンス上のリスクを伴いますか?
- 21. ファイアベースでのjavascriptインジェクション攻撃のリスク
- 22. アプリケーションアセンブリに署名するリスク
- 23. performSelectorInBackgroundを使用するリスク?
- 24. 反射リスクの不整合はありますか?
- 25. MDNバインドポリフィルの使用に伴うリスクはありますか?
- 26. 初期化変数 - なぜ、どのようなリスクですか?
- 27. Webソフトウェアプロジェクトのリスク管理プロファイル?
- 28. QuantLib:ビルド・キー・レートのリスク
- 29. 私のユーザーはリスクなしでHTMLコードを挿入できますか?
- 30. WCF RIA Servicesを使用するリスクはありますか?
Eclipseについてのみ間違っています:私はNetbeans DevのProject Lombokを使っています。また、他のIDEもサポートしていると思います。 – TheLQ
状況は改善しているかもしれませんが、LombokプロジェクトでIDEを使用するには明示的なIDEサポートが必要です。プロジェクトが厳密にJavaコードと見なされなくなる点。 – Zeki
慰めがあれば私はEclipseを使用しますが、他の開発者の中にはIDEAが使われていますが、まだLombokをサポートしていないようです。 – jldugger