{"id":672593,"date":"2026-01-09T03:26:42","date_gmt":"2026-01-09T02:26:42","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2025\/10\/evaluating-kotlin-in-real-projects\/"},"modified":"2026-01-19T06:17:12","modified_gmt":"2026-01-19T05:17:12","slug":"evaluating-kotlin-in-real-projects","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/evaluating-kotlin-in-real-projects\/","title":{"rendered":"\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3051\u308b Kotlin \u306e\u8a55\u4fa1\u624b\u6cd5"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.linkedin.com\/in\/urs-peter-70a2882\/\" target=\"_blank\" rel=\"noreferrer noopener\" data-type=\"link\" data-id=\"https:\/\/bit.ly\/urs-peter-linked-in\">Urs Peter<\/a>\uff08\u30b7\u30cb\u30a2\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a8\u30f3\u30b8\u30cb\u30a2\u3001JetBrains \u8a8d\u5b9a Kotlin \u30c8\u30ec\u30fc\u30ca\u30fc\uff09\u306b\u3088\u308b\u30b2\u30b9\u30c8\u6295\u7a3f\u3067\u3059\u3002 Urs \u306f\u3001\u3088\u308a\u4f53\u7cfb\u7684\u306a Kotlin \u30b9\u30ad\u30eb\u306e\u69cb\u7bc9\u3092\u5e0c\u671b\u3059\u308b\u958b\u767a\u8005\u3092\u5bfe\u8c61\u3068\u3059\u308b <\/em><a href=\"https:\/\/academy.xebia.com\/upskilling\/kotlin-academy\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Kotlin Upskill Program<\/em><\/a>\uff08Kotlin \u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u30d7\u30ed\u30b0\u30e9\u30e0\uff09\u3082 <em>Xebia Academy \u3067<\/em>\u958b\u8b1b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><em>\u3053\u306e\u8a18\u4e8b\u306f\u3001\u5b9f\u969b\u306e\u30c1\u30fc\u30e0\u3067\u3042\u308b\u958b\u767a\u8005\u306e\u597d\u5947\u5fc3\u3092\u304d\u3063\u304b\u3051\u306b\u4f1a\u793e\u5168\u4f53\u304c\u5909\u9769\u3059\u308b\u307e\u3067\u306e Kotlin \u306e\u5c0e\u5165\u7d4c\u7def\u3092\u8ffd\u3063\u305f\u300c<\/em><strong><em>Java \u4e3b\u4f53\u306e\u74b0\u5883\u3067 Kotlin \u306e\u5c0e\u5165\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306e\u7a76\u6975\u30ac\u30a4\u30c9<\/em><\/strong><em>\u300d\u9023\u8f09\u8a18\u4e8b\u306e\u7b2c 2 \u56de\u3067\u3059\u3002<\/em><\/p>\n<p>\u9023\u8f09\u306e\u7b2c 1 \u56de\u3092\u8aad\u3080: <a href=\"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2025\/12\/getting-started-with-kotlin-for-java-developers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java \u958b\u767a\u8005\u5411\u3051 Kotlin \u306e\u57fa\u790e<\/a><\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h2 class=\"wp-block-heading\"><strong>\u8a55\u4fa1\u6bb5\u968e: \u30d7\u30ec\u30a4\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u306e Kotlin \u3092\u8131\u5374<\/strong><\/h2>\n<p>\u30c6\u30b9\u30c8\u3067 Kotlin \u306b\u6163\u308c\u305f\u3089\u3001\u3088\u308a\u672c\u683c\u7684\u306a\u8a55\u4fa1\u3092\u59cb\u3081\u307e\u3057\u3087\u3046\u3002 \u3053\u308c\u306b\u306f\u4e3b\u306b 2 \u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ol>\n<li><a href=\"#1.-build-a-new-microservice\/application-in-kotlin\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/#1.-build-a-new-microservice\/application-in-kotlin\">Kotlin \u3067\u65b0\u3057\u3044\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9 \/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b<\/a><\/li>\n<li><a href=\"#2.-extend\/convert-an-existing-java-application\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/#2.-extend\/convert-an-existing-java-application\">\u65e2\u5b58\u306e Java \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u62e1\u5f35 \/ \u5909\u63db\u3059\u308b<\/a><\/li>\n<\/ol>\n<h3 id=\"1.-build-a-new-microservice\/application-in-kotlin\" class=\"wp-block-heading\"><strong>1. Kotlin \u3067\u65b0\u3057\u3044\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9 \/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b<\/strong><\/h3>\n<p>\u65b0\u898f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u307e\u305f\u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u3063\u3066\u65b0\u305f\u306b\u59cb\u3081\u308b\u3068\u3001\u65e2\u5b58\u30b3\u30fc\u30c9\u306e\u5236\u7d04\u3092\u53d7\u3051\u305a\u306b\u5b8c\u5168\u306a Kotlin \u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002 \u3053\u306e\u65b9\u6cd5\u3067\u306f\u6700\u9ad8\u306e\u5b66\u7fd2\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u5f97\u3089\u308c\u308b\u3053\u3068\u304c\u591a\u304f\u3001Kotlin \u306e\u5f37\u307f\u3092\u6700\u3082\u3088\u304f\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"wp-block-columns is-layout-flex wp-container-3 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis: 66.66%;\">\n<p><strong>\u30d7\u30ed\u958b\u767a\u8005\u304b\u3089\u306e\u30d2\u30f3\u30c8<\/strong>: \u3053\u306e\u6bb5\u968e\u3067\u306f\u5c02\u9580\u5bb6\u304b\u3089\u306e\u652f\u63f4\u3092\u5f97\u307e\u3057\u3087\u3046\u3002 \u958b\u767a\u8005\u304c\u81ea\u5206\u306e\u80fd\u529b\u306b\u81ea\u4fe1\u3092\u6301\u3064\u306e\u306f\u7121\u7406\u304b\u3089\u306c\u3053\u3068\u3067\u3059\u304c\u3001Java \u30e9\u30a4\u30af\u306a Kotlin \u3084 Kotlin \u30d9\u30fc\u30b9\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4e0d\u4f7f\u7528\u3068\u3044\u3063\u305f\u30df\u30b9\u3092\u65e9\u3044\u6bb5\u968e\u3067\u56de\u907f\u3059\u308b\u3053\u3068\u3067\u3001\u6570\u304b\u6708\u5206\u306e\u6280\u8853\u7684\u8ca0\u50b5\u3092\u306a\u304f\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis: 33.33%;\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-646384\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-5.png\" alt=\"\" width=\"600\" height=\"400\" \/><\/figure>\n<\/div>\n<\/div>\n<p>\u305d\u3046\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a Java \u7d4c\u9a13\u8005\u304c Kotlin \u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u3088\u304f\u3042\u308b\u843d\u3068\u3057\u7a74\u3092\u56de\u907f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><em>\u843d\u3068\u3057\u7a74: \u81ea\u5206\u304c Java \u3067\u4f7f\u7528\u3057\u3066\u3044\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306f\u5225\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u629e\u3059\u308b\u3002<\/em><\/p>\n<p>\u30d2\u30f3\u30c8: <strong>\u65e2\u5b58\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046<\/strong>\u3002<\/p>\n<p>Java \u3067 Spring Boot \u3092\u4f7f\u7528\u3057\u3066\u3044\u305f\u306e\u306a\u3089\u3001Kotlin \u3067\u3082\u305d\u308c\u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002 Spring Boot \u306f\u6700\u9ad8\u6c34\u6e96\u306e Kotlin \u306e\u30b5\u30dd\u30fc\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3059\u308b\u30e1\u30ea\u30c3\u30c8\u306f\u7279\u306b\u3042\u308a\u307e\u305b\u3093\u3002 \u3055\u3089\u306b\u3001\u65b0\u3057\u3044\u8a00\u8a9e\u3082\u65b0\u3057\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3082\u5b66\u3070\u3056\u308b\u3092\u5f97\u306a\u304f\u306a\u308b\u305f\u3081\u3001\u4e8b\u304c\u8907\u96d1\u5316\u3059\u308b\u3060\u3051\u3067\u4f55\u306e\u30e1\u30ea\u30c3\u30c8\u3082\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p><strong>\u91cd\u8981\u4e8b\u9805<\/strong>: Spring \u306f\u62e1\u5f35\u5bfe\u8c61\u306e\u30af\u30e9\u30b9\u306b open \u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3059\u308b\u3053\u3068\u3092\u8981\u6c42\u3059\u308b Kotlin \u306e\u300c\u610f\u56f3\u7684\u306a\u7d99\u627f\u300d\u306e\u539f\u5247\u306b\u5e72\u6e09\u3057\u307e\u3059\u3002<\/p>\n<p>open \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u3059\u3079\u3066\u306e Spring \u95a2\u9023\u30af\u30e9\u30b9\uff08<code>@Configuration<\/code> \u306a\u3069\uff09\u306b\u8ffd\u52a0\u3057\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001<a href=\"https:\/\/kotlinlang.org\/docs\/all-open-plugin.html#spring-support\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/kotlinlang.org\/docs\/all-open-plugin.html#spring-support<\/a> \u306b\u3042\u308b\u30d3\u30eb\u30c9\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 \u6709\u540d\u306a\u30aa\u30f3\u30e9\u30a4\u30f3 <a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring initializr \u30c4\u30fc\u30eb<\/a>\u3067 Spring \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u305f\u5834\u5408\u306f\u3001\u3053\u306e\u30d3\u30eb\u30c9\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u3042\u3089\u304b\u3058\u3081\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><em>\u843d\u3068\u3057\u7a74: Java \u30e9\u30a4\u30af\u306a Kotlin \u3092\u66f8\u304f\u3001Kotlin \u306e\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u306f\u306a\u304f\u4e00\u822c\u7684\u306a Java API \u3092\u4f7f\u7528\u3059\u308b:<\/em><\/p>\n<p>\u3059\u3079\u3066\u306e\u843d\u3068\u3057\u7a74\u3092\u5217\u6319\u3059\u308b\u3068\u975e\u5e38\u306b\u9577\u304f\u306a\u3063\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u6700\u3082\u3088\u304f\u3042\u308b\u3082\u306e\u306b\u7d5e\u308a\u307e\u3057\u3087\u3046\u3002<\/p>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 1: Kotlin \u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3067\u306f\u306a\u304f Java \u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>\u5e38\u306b Kotlin \u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002<\/strong><\/p>\n<p>Kotlin \u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306f Java \u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3068\u5b8c\u5168\u306b\u76f8\u4e92\u904b\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001Java \u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u5fc5\u8981\u6027\u3092\u306a\u304f\u3059\u7c21\u6f54\u3067\u6a5f\u80fd\u8c4a\u5bcc\u306a\u9ad8\u968e\u95a2\u6570\u304c\u5099\u308f\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306f\u53ce\u76ca\u5225\uff08\u5358\u4fa1 x \u8ca9\u58f2\u6570\uff09\u306b\u4e0a\u4f4d 3 \u3064\u306e\u5546\u54c1\u3092\u9078\u629e\u3057\u3001\u5546\u54c1\u30ab\u30c6\u30b4\u30ea\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u305f\u4f8b\u3067\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">record Product(String name, String category, double price, int sold){}\n\nList products = List.of(\n           new Product(\"Lollipop\", \"sweets\", 1.2, 321),\n           new Product(\"Broccoli\", \"vegetable\", 1.8, 5);\n\nMap&lt;String, List&gt; top3RevenueByCategory =\n       products.stream()\n          .collect(Collectors.groupingBy(\n                Product::category,\n                Collectors.collectingAndThen(\n                    Collectors.toList(),\n                    list -&gt; list.stream()\n                              .sorted(Comparator.comparingDouble(\n                                  (Product p) -&gt; p.price() * p.sold())\n                                   .reversed())\n                                   .limit(3)\n                                   .toList()\n                       \t\t)\n          )\n);<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val top3RevenueByCategory: Map&lt;String, List&gt; =\n   products.groupBy { it.category }\n       .mapValues { (_, list) -&gt;\n           list.sortedByDescending { it.price * it.sold }.take(3)\n       }<\/pre>\n<p>Kotlin \u306e Java \u3068\u306e\u76f8\u4e92\u904b\u7528\u6027\u306b\u3088\u308a\u3001Java \u306e\u30af\u30e9\u30b9\u3068\u30ec\u30b3\u30fc\u30c9\u3092\u30cd\u30a4\u30c6\u30a3\u30d6\u306a Kotlin \u3067\u3042\u308b\u304b\u306e\u3088\u3046\u306b\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001Kotlin \u306e\uff08data\uff09\u30af\u30e9\u30b9\u3092\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 2: Java \u306e Optional \u3092\u4f7f\u7528\u3057\u7d9a\u3051\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>null \u8a31\u5bb9\u578b\u3092\u53d6\u308a\u5165\u308c\u307e\u3057\u3087\u3046<\/strong>\u3002<\/p>\n<p>Java \u958b\u767a\u8005\u304c Kotlin \u306b\u79fb\u884c\u3059\u308b\u4e3b\u306a\u7406\u7531\u306e 1 \u3064\u306b\u306f\u3001Kotlin \u304c null \u8a31\u5bb9\u6027\u3092\u7d44\u307f\u8fbc\u307f\u3067\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u305f\u3081\u3001NullPointerExceptions \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001Optional \u3067\u306f\u306a\u304f\u3001null \u8a31\u5bb9\u578b\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002 \u307e\u3060\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b Optional \u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u304b\uff1f \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068\u3001Optional \u3092\u7c21\u5358\u306b null \u8a31\u5bb9\u578b\u306b\u5909\u63db\u3057\u3066\u524a\u9664\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Let\u2019s assume this repository is hard to change, because it\u2019s a library you depend on\nclass OrderRepository {\n      \/\/it returns Optional, but we want nullable types\n      fun getOrderBy(id: Long): Optional = \u2026\n}\n\n\/\/Simply add an extension method and apply the orElse(null) trick\nfun OrderRepository.getOrderByOrNull(id: Long): Order? = \n                                    getOrderBy(id).orElse(null)\n\n\/\/Now enjoy the safety and ease of use of nullable types:\n\n\/\/Past:\n val g = repository.getOrderBy(12).flatMap { product -&gt;\n     product.goody.map { it.name }\n}.orElse(\"No goody found\")\n\n\/\/Future:\n val g = repository.getOrderByOrNull(12)?.goody?.name ?: \"No goody found\"<\/pre>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 3: \u9759\u7684\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u7528\u3057\u7d9a\u3051\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u3092\u53d6\u308a\u5165\u308c\u307e\u3057\u3087\u3046<\/strong>\u3002<\/p>\n<p>\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u591a\u304f\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u30e9\u30c3\u30d1\u30fc\u3088\u308a\u3082\u30b3\u30fc\u30c9\u306e\u6d41\u308c\u304c\u30b9\u30e0\u30fc\u30ba\u306b\u306a\u308a\u3001\u8aad\u307f\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n<li>\u30b3\u30fc\u30c9\u88dc\u5b8c\u306e\u5bfe\u8c61\u306b\u306a\u308a\u307e\u3059\u3002\u30e9\u30c3\u30d1\u30fc\u306f\u5bfe\u8c61\u306b\u306a\u308a\u307e\u305b\u3093\u3002<\/li>\n<li>\u62e1\u5f35\u306f\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3066\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u62e1\u5f35\u3057\u305f\u6a5f\u80fd\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u5b9a\u90e8\u5206\u3067\u9078\u629e\u7684\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Very common approach in Java to add additional helper methods\npublic class DateUtils {\n      public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = \n           DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss\");\n\n      public String formatted(LocalDateTime dateTime, \n\t\t              DateTimeFormatter formatter) {\n         return dateTime.format(formatter);\n      }\n\n      public String formatted(LocalDateTime dateTime) {\n         return formatted(dateTime, DEFAULT_DATE_TIME_FORMATTER);\n      }\n}\n\n\/\/Usage\n formatted(LocalDateTime.now());\n<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val DEFAULT_DATE_TIME_FORMATTER: DateTimeFormatter = \nDateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss\")\n\n\/\/Use an extension method, including a default argument, which omits the need for an overloaded method.\u00a0\nfun LocalDateTime.asString(\n\u00a0\u00a0\u00a0formatter: DateTimeFormatter = DEFAULT_DATE_TIME_FORMATTER): String =\u00a0\n      this.format(formatter)\n\n\/\/Usage\nLocalDateTime.now().formatted()<\/pre>\n<p>Kotlin \u306f\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u5909\u6570\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u3064\u307e\u308a\u3001<em><code>DEFAULT_DATE_TIME_FORMATTER<\/code><\/em> \u306a\u3069\u306e\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u3092 Java \u306e\u3088\u3046\u306b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30d0\u30a4\u30f3\u30c9\u305b\u305a\u306b\u7c21\u5358\u306b\u5ba3\u8a00\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 4: \uff08\u4e0d\u5b89\u5b9a\u306a\uff09Java API \u3092\u5229\u7528\u3059\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>Kotlin \u306e\u5b89\u5b9a\u3057\u305f API \u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002\u00a0<\/strong><\/p>\n<p>Kotlin \u306e\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u4eca\u3082 Java \u306e\u5b9f\u88c5\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001Java \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f7f\u3044\u52dd\u624b\u304c\u826f\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002 Spring \u306a\u3069\u3001\u307b\u307c\u3059\u3079\u3066\u306e\u4e3b\u8981\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3082\u540c\u3058\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f8b:<\/strong><\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">String text;\ntry (\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var reader = new BufferedReader(\n                  new InputStreamReader(new FileInputStream(\"out.txt\"), \n            StandardCharsets.UTF_8))) {\n\u00a0\u00a0\u00a0text = reader\n            .lines()\n            .collect(Collectors.joining(System.lineSeparator()));\n}\nSystem.out.println(\"Downloaded text: \" +\u00a0 text + \"\\n\");<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Kotlin has enhanced the Java standard library with many powerful extension methods, like on java.io.*, which makes input stream processing a snap due to its fluent nature, fully supported by code completion\n\nval text = FileInputStream(\"path\").use {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0     it.bufferedReader().readText()\n           }\nprintln(\"Downloaded text: $text\\n\");<\/pre>\n<p><strong>Spring \u306e\u4f8b:<\/strong><br \/><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">final var books =\u00a0 RestClient.create()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.get()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.uri(\"http:\/\/...\/api\/books\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.retrieve()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.body( new ParameterizedTypeReference&lt;List&gt;(){}); \/\/ \u21e6 inconvenient ParameterizedTypeReference<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import org.springframework.web.client.body\nval books = RestClient.create()\n\u00a0\u00a0\u00a0.get()\n\u00a0\u00a0\u00a0.uri(\"http:\/\/...\/api\/books\")\n\u00a0\u00a0\u00a0.retrieve()\n\u00a0\u00a0\u00a0.body&lt;List&gt;() \/\/\u21e6 Kotlin offers an extension that only requires the type without the need for a ParameterizedTypeReference<\/pre>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 5: public \u30af\u30e9\u30b9\u3054\u3068\u306b\u500b\u5225\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>\u95a2\u9023\u3059\u308b public \u30af\u30e9\u30b9\u3092 1 \u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u307e\u3068\u3081\u307e\u3057\u3087\u3046\u3002\u00a0<\/strong><\/p>\n<p>\u305d\u3046\u3059\u308b\u3053\u3068\u3067\u3001\u591a\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u9593\u3092\u79fb\u52d5\u3057\u306a\u304f\u3066\u3082\uff08\u30b5\u30d6\uff09\u30c9\u30e1\u30a4\u30f3\u306e\u69cb\u9020\u3092\u5341\u5206\u306b\u7406\u89e3\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-647331\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-15.png\" alt=\"\" width=\"1114\" height=\"934\" \/><\/figure>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/For domain classes consider data classes - see why below\ndata class User(val email: String,\n            \/\/Use nullable types for safety and expressiveness\n\u00a0 \u00a0        val avatarUrl: URL? = null,\u00a0\n           var isEmailVerified: Boolean)\n\ndata class Account(val user:User,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0val address: Address,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0val mfaEnabled:Boolean,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0val createdAt: Instant)\n\ndata class Address(val street: String,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0val city: String,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 val postalCode: String)<\/pre>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 6: \u53ef\u5909\u6027\u3092\u524d\u63d0\u3068\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u5229\u7528\u3057\u3066\u3044\u308b<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>Kotlin \u306e\u6a19\u6e96\u3067\u3042\u308b\u4e0d\u5909\u6027\u3092\u53d6\u308a\u5165\u308c\u307e\u3057\u3087\u3046\u3002<\/strong><\/p>\n<p>Java \u3092\u542b\u3080\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u53ef\u5909\u6027\u3088\u308a\u3082\u4e0d\u5909\u6027\u304c\u597d\u307e\u308c\u308b\u50be\u5411\u306b\u3042\u308b\u3053\u3068\u306f\u660e\u3089\u304b\u3067\u3059\u3002<\/p>\n<p>\u305d\u306e\u7406\u7531\u306f\u660e\u3089\u304b\u3067\u3059\u3002\u4e0d\u5909\u6027\u306b\u3088\u3063\u3066\u610f\u56f3\u3057\u306a\u3044\u526f\u4f5c\u7528\u304c\u672a\u7136\u306b\u9632\u304c\u308c\u3001\u30b3\u30fc\u30c9\u306e\u5b89\u5168\u6027\u3068\u4e88\u6e2c\u6027\u304c\u9ad8\u307e\u308a\u3001\u7406\u89e3\u3057\u3084\u3059\u304f\u306a\u308b\u305f\u3081\u3067\u3059\u3002 \u307e\u305f\u3001\u4e0d\u5909\u30c7\u30fc\u30bf\u306f\u30ec\u30fc\u30b9\u30b3\u30f3\u30c7\u30a3\u30b7\u30e7\u30f3\u306e\u767a\u751f\u30ea\u30b9\u30af\u3082\u306a\u304f\u30b9\u30ec\u30c3\u30c9\u9593\u3067\u81ea\u7531\u306b\u5171\u6709\u3067\u304d\u308b\u305f\u3081\u3001\u4e26\u884c\u51e6\u7406\u304c\u5358\u7d14\u5316\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001Kotlin \u3092\u542b\u3080\u5927\u591a\u6570\u306e\u30e2\u30c0\u30f3\u306a\u8a00\u8a9e\u3067\u306f\u3001\u4e0d\u5909\u6027\u304c\u6a19\u6e96\u3067\u5f37\u8abf\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u5f37\u304f\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002 Kotlin \u3067\u306f\u3001\u53ef\u5909\u6027\u304c\u672c\u5f53\u306b\u5fc5\u8981\u3068\u306a\u3063\u305f\u5834\u5408\u306e\u9078\u629e\u80a2\u3068\u3057\u3066\u6b8b\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306e\u3001\u4e0d\u5909\u6027\u304c\u6a19\u6e96\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306b\u3001Kotlin \u306e<strong>\u5f37\u529b\u306a\u4e0d\u5909\u6027\u4e00\u5f0f<\/strong>\u306b\u3064\u3044\u3066\u3001\u7c21\u5358\u306b\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p>1. <code>var<\/code> \u3067\u306f\u306a\u304f <code>val<\/code> \u3092\u4f7f\u7528\u3059\u308b<\/p>\n<p><code>var<\/code> \u3088\u308a\u3082 <code>val<\/code> \u3092\u512a\u5148\u3057\u307e\u3057\u3087\u3046\u3002 IntelliJ IDEA \u306f <code>val<\/code> \u3092\u4f7f\u7528\u3067\u304d\u308b\u7b87\u6240\u3067 <code>var<\/code> \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u901a\u77e5\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<p>2. <code>copy(...)<\/code> \u3067\uff08\u4e0d\u5909\uff09data \u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3059\u308b<\/p>\n<p>\u30c9\u30e1\u30a4\u30f3\u95a2\u9023\u306e\u30af\u30e9\u30b9\u3067\u306f\u3001<code>data<\/code> \u30af\u30e9\u30b9\u3092 <code>val<\/code> \u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002 Kotlin \u306e <code>data<\/code> \u30af\u30e9\u30b9\u306f\u3088\u304f Java \u306e <code>records<\/code> \u3068\u6bd4\u8f03\u3055\u308c\u307e\u3059\u3002 \u3053\u308c\u3089\u306f\u5171\u901a\u3059\u308b\u90e8\u5206\u3082\u3042\u308a\u307e\u3059\u304c\u3001<code>data<\/code> \u30af\u30e9\u30b9\u306f\u30ad\u30e9\u30fc\u6a5f\u80fd\u3067\u3042\u308b <code>copy(...)<\/code> \u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u304c\u306a\u3044\u5834\u5408\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3067\u5fc5\u8981\u3068\u306a\u308b\u3053\u3068\u306e\u591a\u3044 <code>record<\/code> \u306e\u5909\u63db\u304c\u975e\u5e38\u306b\u9762\u5012\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/only immutable state\npublic record Person(String name, int age) {\n\u00a0\u00a0\u00a0\/\/Lack of default parameters requires overloaded constructor\n\u00a0\u00a0\u00a0public Person(String name) {\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this(name, 0);\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\/\/+ due to lack of String interpolation\n\u00a0 public String sayHi() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Hello, my name is \" + name + \" and I am \" + age + \" years old.\";\n\u00a0\u00a0\u00a0}\n}\n\n\/\/Usage\nfinal var jack = new Person(\"Jack\", 42);\njack: Person[name=Jack, age=5]\n\n\/\/The issue is here: transforming a record requires manually copying the identical state to the new instance \u2639\ufe0f\nfinal var fred = new Person(\"Fred\", jack.name);<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/also supports mutable state (var)\ndata class Person(val name: String,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0val age: Int = 0) {\n\u00a0 \/\/string interpolation\n\u00a0 fun sayHi() = \"Hi, my name is $name and I am $age years old.\"\n}\nval jack = Person(\"Jack\", 42)\njack: Person(name=Jack, age=42)\n\n\/\/Kotlin offers the copy method, which, due to the \u2018named argument\u2019 feature, allows you to only adjust the state you want to change \ud83d\ude03\nval fred = jack.copy(name = \"Fred\")\nfred: Person(name=Fred, age=42)<\/pre>\n<p>\u3055\u3089\u306b\u3001\u30c9\u30e1\u30a4\u30f3\u95a2\u9023\u306e\u30af\u30e9\u30b9\u306b\u306f\u3067\u304d\u308b\u9650\u308a data \u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002 \u305d\u306e\u4e0d\u5909\u6027\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30a2\u3092\u6271\u3046\u306e\u304c\u5b89\u5168\u3001\u660e\u5feb\u3001\u7c21\u5358\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u30d2\u30f3\u30c8: <strong>\u53ef\u5909\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3088\u308a\u3082\u4e0d\u5909\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u512a\u5148\u3057\u307e\u3057\u3087\u3046\u3002<\/strong><\/p>\n<p>\u4e0d\u5909\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306b\u306f\u30b9\u30ec\u30c3\u30c9\u5b89\u5168\u6027\u306b\u95a2\u3059\u308b\u660e\u78ba\u306a\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u3001\u5b89\u5168\u306b\u6e21\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u7406\u89e3\u3057\u3084\u3059\u3044\u3068\u3044\u3046\u7279\u5fb4\u3082\u3042\u308a\u307e\u3059\u3002 Java \u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306f\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306b\u5e7e\u5206\u304b\u306e\u4e0d\u5909\u6027\u3092\u4e0e\u3048\u307e\u3059\u304c\u3001\u5b9f\u884c\u6642\u4f8b\u5916\u3092\u5f15\u304d\u8d77\u3053\u3057\u3084\u3059\u3044\u305f\u3081\u3001\u4f7f\u7528\u3059\u308b\u306e\u306f\u5371\u967a\u3067\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">List.of(1,2,3).add(4); \u274cunsafe \ud83d\ude2c! .add(...) compiles, but throws UnsupportedOperationException<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/The default collections in Kotlin are immutable (read-only)\nlistOf(1,2,3).add(4); \u00a0\/\/\u2705safe: does not compile\n\nval l0 = listOf(1,2,3)\u00a0\nval l1 = l0 + 4 \/\/\u2705safe: it will return a new list containing the added element\nl1 shouldBe listOf(1,2,3,4) \/\/\u2705<\/pre>\n<p>\u540c\u3058\u3053\u3068\u306f <code>Collections.<em>unmodifiableList(...)<\/em><\/code> \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306b\u3082\u5f53\u3066\u306f\u307e\u308a\u307e\u3059\u3002\u5b89\u5168\u3067\u306a\u3044\u3060\u3051\u3067\u306a\u304f\u3001\u8ffd\u52a0\u306e\u5272\u308a\u5f53\u3066\u3082\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PersonRepo {\n\u00a0\u00a0\u00a0private final List cache = new ArrayList&lt;&gt;();\n\u00a0\u00a0\u00a0\/\/ Java \u2013 must clone or wrap every call\n\u00a0\u00a0\u00a0public List getItems() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Collections.unmodifiableList(cache); \u00a0 \/\/\u26a0\ufe0fextra alloc\n\u00a0\u00a0\u00a0}\n}\n\n\/\/Usage\npersonRepo.getItems().add(joe) \u274cunsafe \ud83d\ude2c! .add(...) can be called but throws UnsupportedOperationException<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PersonRepo {\n\n\/\/The need to type \u2018mutable\u2019 for mutable collections is intentional: Kotlin wants you to use immutable ones by default. But sometimes you need them:\n\n\u00a0\u00a0\u00a0private val cache: MutableList = mutableListOf()\n\n\u00a0\u00a0\u00a0fun items(): List = cache \/\/\u2705safe: though the underlying collection is mutable, by returning it as its superclass List&lt;...&gt;, it only exposes the read-only interface\n\n}\n\n\/\/Usage\npersonRepo.items().add(joe) \/\/\u2705safe:\ud83d\ude2c! Does not compile<\/pre>\n<p>\u4e26\u884c\u51e6\u7406\u306b\u95a2\u3057\u3066\u306f\u3001\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3082\u542b\u3081\u3066\u4e0d\u5909\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u512a\u5148\u3059\u3079\u304d\u3067\u3059\u3002 Java \u306e\u5834\u5408\u3001<code>CopyOnWriteArrayList<\/code> \u306e\u3088\u3046\u306a\u5225\u306e API \u3084\u5236\u9650\u306e\u3042\u308b API \u3092\u63d0\u4f9b\u3059\u308b\u7279\u5225\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3067\u306f\u8981\u6c42\u3055\u308c\u308b\u52b4\u529b\u304c\u6bd4\u8f03\u7684\u591a\u304f\u306a\u308a\u307e\u3059\u3002 \u305d\u308c\u306b\u5bfe\u3057\u3001Kotlin \u3067\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306e <code>List&lt;...&gt;<\/code> \u304c\u307b\u307c\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002<\/p>\n<p>\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u53ef\u5909\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001Kotlin \u3067\u306f\u6c38\u7d9a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\uff08<code>persistentListOf(...)<\/code>\u3001<code>persistentMapOf(...)<\/code>\uff09\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3069\u3061\u3089\u3082\u540c\u3058\u5f37\u529b\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u5171\u6709\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ConcurrentHashMap&lt;String, Integer&gt; persons = new ConcurrentHashMap&lt;&gt;();\npersons.put(\"Alice\", 23);\npersons.put(\"Bob\", \u00a0 21);\n\n\/\/not fluent and data copying going on\nMap&lt;String, Integer&gt; incPersons = new HashMap&lt;&gt;(persons.size());\npersons.forEach((k, v) -&gt; incPersons.put(k, v + 1));\n\n\/\/wordy and data copying going on\npersons\n\u00a0\u00a0\u00a0.entrySet()\n\u00a0\u00a0\u00a0.stream()\n\u00a0\u00a0\u00a0.forEach(entry -&gt;\u00a0\n      entry.setValue(entry.getValue() + 1));<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">persistentMapOf(\"Alice\" to 23, \"Bob\" to 21)\n\u00a0\u00a0\u00a0      .mapValues { (key, value) -&gt; value + 1 } \/\/\u2705same rich API like any other Kotlin Map type and not data copying going on<\/pre>\n<h4 class=\"wp-block-heading\"><em>\u843d\u3068\u3057\u7a74 7: Builder \u3092\u4f7f\u7528\u3057\u7d9a\u3051\u308b\uff08Lombok \u3092\u4f7f\u7528\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u306a\u3089\u306a\u304a\u60aa\u3044\uff09\u00a0<\/em><\/h4>\n<p>\u30d2\u30f3\u30c8: <strong>\u540d\u524d\u4ed8\u304d\u5f15\u6570\u3092\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002<\/strong><\/p>\n<p>Builder \u306f Java \u3067\u306f\u975e\u5e38\u306b\u4e00\u822c\u7684\u3067\u3059\u3002 \u4fbf\u5229\u3067\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u7121\u99c4\u306a\u30b3\u30fc\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u3001\u5b89\u5168\u3067\u306f\u306a\u304f\u3001\u8907\u96d1\u3055\u304c\u5897\u3057\u307e\u3059\u3002 Kotlin \u3067\u306f\u5358\u7d14\u306a\u8a00\u8a9e\u6a5f\u80fd\u3067\u3042\u308b\u540d\u524d\u4ed8\u304d\u5f15\u6570\u304c\u3042\u308b\u305f\u3081\u3001Builder \u306f\u7121\u7528\u306e\u9577\u7269\u3068\u5316\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public record Person(String name, int age) {\n\n\u00a0\u00a0\u00a0\/\/ Builder for Person\n\u00a0\u00a0\u00a0public static class Builder {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0private String name;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0private int age;\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public Builder() {}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public Builder name(String name) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\n\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return this;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public Builder age(int age) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.age = age;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return this;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public Person build() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new Person(name, age);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0}\n}\n\n\/\/Usage\nnew JPerson.Builder().name(\"Jack\").age(36).build(); \/\/compiles and succeeds at runtime\n\nnew JPerson.Builder().age(36).build(); \/\/\u274cunsafe \ud83d\ude2c: compiles but fails at runtime.<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">data class Person(val name: String, val age: Int = 0)\n\n\/\/Usage - no builder, only named arguments.\nPerson(name = \"Jack\") \/\/\u2705safe: if it compiles, it always succeeds at runtime\nPerson(name = \"Jack\", age = 36) \/\/\u2705<\/pre>\n<h3 id=\"2.-extend\/convert-an-existing-java-application\" class=\"wp-block-heading\"><strong>2. \u65e2\u5b58\u306e Java \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u62e1\u5f35 \/ \u5909\u63db\u3059\u308b<\/strong><\/h3>\n<p>\u307e\u3063\u305f\u304f\u65b0\u3057\u3044\u74b0\u5883\u3067 Kotlin \u3092\u8a66\u3059\u9078\u629e\u80a2\u304c\u306a\u3044\u5834\u5408\u3001<a href=\"https:\/\/pleiades.io\/help\/idea\/get-started-with-kotlin.html#add-kotlin-dependency\" target=\"_blank\" rel=\"noreferrer noopener\">\u65b0\u3057\u3044 Kotlin \u6a5f\u80fd\u307e\u305f\u306f Kotlin \u30e2\u30b8\u30e5\u30fc\u30eb\u5168\u4f53\u3092\u65e2\u5b58\u306e Java \u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0<\/a>\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 Kotlin \u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a Java \u3068\u306e\u76f8\u4e92\u904b\u7528\u6027\u306b\u3088\u308a\u3001Java \u306e\u547c\u3073\u51fa\u3057\u5143\u306b Java \u306e\u3088\u3046\u306b\u898b\u3048\u308b Kotlin \u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3053\u306e\u65b9\u6cd5\u3067\u306f\u4ee5\u4e0b\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u5927\u898f\u6a21\u306a\u66f8\u304d\u63db\u3048\u3092\u884c\u308f\u305a\u306b\u6bb5\u968e\u7684\u306b\u79fb\u884c\u3059\u308b<\/li>\n<li>\u7279\u5b9a\u306e\u72b6\u6cc1\u3067 Kotlin \u3092\u5b9f\u969b\u306b\u30c6\u30b9\u30c8\u3059\u308b<\/li>\n<li>\u672c\u756a\u74b0\u5883\u306e Kotlin \u30b3\u30fc\u30c9\u3067\u30c1\u30fc\u30e0\u306e\u81ea\u4fe1\u3092\u7bc9\u304f<\/li>\n<\/ul>\n<p><em>\u9069\u5f53\u306a\u5834\u6240<\/em>\u304b\u3089\u59cb\u3081\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u4ee5\u4e0b\u306e\u5c0e\u5165\u65b9\u6cd5\u3092\u691c\u8a0e\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><strong>\u5916\u5074\u304b\u3089\u7740\u624b:<\/strong><\/p>\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3084\u30d0\u30c3\u30c1\u30b8\u30e7\u30d6\u306a\u3069\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u300c\u672b\u7aef\u300d\u90e8\u5206\u304b\u3089\u7740\u624b\u3057\u3001\u30b3\u30a2\u30c9\u30e1\u30a4\u30f3\u306b\u5411\u304b\u3063\u3066\u5c0e\u5165\u3092\u9032\u3081\u307e\u3059\u3002 \u3053\u306e\u5834\u5408\u3001\u6b21\u306e\u3088\u3046\u306a\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u9593\u306e\u5206\u96e2<\/strong>: \u672b\u7aef\u306e\u30af\u30e9\u30b9\u304c<em>\u672b\u7aef\u306e\u30af\u30e9\u30b9\u306b<\/em>\u4f9d\u5b58\u3059\u308b\u3053\u3068\u306f\u307e\u308c\u3067\u3042\u308b\u305f\u3081\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u4ed6\u306e\u90e8\u5206\u3092\u5909\u66f4\u305b\u305a\u306b\u672b\u7aef\u306e\u30af\u30e9\u30b9\u306e\u307f\u3092 Kotlin \u306b\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/li>\n<li><strong>\u4ed6\u306b\u6ce2\u53ca\u3059\u308b\u7de8\u96c6\u304c\u307b\u3068\u3093\u3069\u306a\u3044\u3002<\/strong> \u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u76f8\u4e92\u904b\u7528\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u307b\u307c\u5909\u66f4\u3092\u52a0\u3048\u308b\u3053\u3068\u306a\u304f\u5909\u63db\u5f8c\u306e UI\/\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304b\u3089\u65e2\u5b58\u306e Java \u30c9\u30e1\u30a4\u30f3\u30b3\u30fc\u30c9\u3092\u547c\u3073\u51fa\u305b\u307e\u3059\u3002<\/li>\n<li><strong>\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5c0f\u3055\u304f\u306a\u308a\u3001\u30ec\u30d3\u30e5\u30fc\u304c\u7c21\u5358\u306b\u306a\u308b\u3002<\/strong> \u30d5\u30a1\u30a4\u30eb\u5358\u4f4d\u307e\u305f\u306f\u6a5f\u80fd\u5358\u4f4d\u3067\u79fb\u884c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<p><strong>\u5185\u5074\u304b\u3089\u7740\u624b:<\/strong><\/p>\n<p>\u30b3\u30a2\u304b\u3089\u7740\u624b\u3057\u3066\u5916\u5074\u306e\u30ec\u30a4\u30e4\u30fc\u306b\u5411\u304b\u3063\u3066\u5c0e\u5165\u3092\u9032\u3081\u308b\u65b9\u6cd5\u306f\u3001\u5f80\u3005\u306b\u3057\u3066\u30ea\u30b9\u30af\u304c\u9ad8\u307e\u308a\u307e\u3059\u3002\u4e0a\u8a18\u306e\u5916\u5074\u304b\u3089\u7740\u624b\u3059\u308b\u65b9\u6cd5\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u640d\u306a\u308f\u308c\u3066\u3057\u307e\u3046\u305f\u3081\u3067\u3059\u3002 \u305f\u3060\u3057\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u5408\u306f\u5b9f\u884c\u53ef\u80fd\u306a\u9078\u629e\u80a2\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30b3\u30a2\u304c\u975e\u5e38\u306b\u5c0f\u3055\u3044\u304b\u81ea\u5df1\u5b8c\u7d50\u578b\u3067\u3042\u308b\u3002<\/strong> \u30c9\u30e1\u30a4\u30f3\u30ec\u30a4\u30e4\u30fc\u306b\u5c11\u6570\u306e POJO \u3068\u30b5\u30fc\u30d3\u30b9\u3057\u304b\u306a\u3044\u5834\u5408\u3001\u65e9\u3081\u306b\u66f8\u304d\u63db\u3048\u308b\u3068\u30b3\u30b9\u30c8\u304c\u4e0b\u304c\u308a\u3001\u6163\u7528\u7684\u306a\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30c8\uff08data \u30af\u30e9\u30b9\u3001\u5024\u30af\u30e9\u30b9\u3001sealed \u968e\u5c64\uff09\u3092\u3059\u3050\u306b\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<li><strong>\u3044\u305a\u308c\u306b\u3057\u3066\u3082\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u66f8\u304d\u76f4\u3059\u3002<\/strong> \u79fb\u884c\u306e\u969b\u306b\u975e\u5909\u30af\u30e9\u30b9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3057\u305f\u308a\u3001DDD \u30d1\u30bf\u30fc\u30f3\uff08\u5024\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3001\u96c6\u8a08\uff09\u3092\u5c0e\u5165\u3057\u305f\u308a\u3059\u308b\u4e88\u5b9a\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u6700\u521d\u306b Kotlin \u3067\u30c9\u30e1\u30a4\u30f3\u3092\u8a2d\u8a08\u3057\u76f4\u3059\u65b9\u304c\u30af\u30ea\u30fc\u30f3\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<li><strong>\u53b3\u683c\u306a null \u5b89\u5168\u6027\u30b3\u30f3\u30c8\u30e9\u30af\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3002<\/strong> Kotlin \u3092\u4e2d\u5fc3\u306b\u636e\u3048\u308b\u3068\u30c9\u30e1\u30a4\u30f3\u304c\u300cnull \u5b89\u5168\u306e\u8981\u585e\u300d\u306b\u306a\u308a\u307e\u3059\u3002\u5916\u5074\u306e Java \u30ec\u30a4\u30e4\u30fc\u306f null \u3092\u9001\u4fe1\u3067\u304d\u307e\u3059\u304c\u3001\u5883\u754c\u304c\u660e\u793a\u7684\u306b\u306a\u3063\u3066\u76e3\u8996\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n<p><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u5358\u4f4d\u3067\u5909\u63db:<\/strong><\/p>\n<ul>\n<li>\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u30ec\u30a4\u30e4\u30fc\u3067\u306f\u306a\u304f\u6a5f\u80fd\u3054\u3068\u306b\u307e\u3068\u3081\u3089\u308c\u3066\u304a\u308a\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u7ba1\u7406\u53ef\u80fd\u306a\u30b5\u30a4\u30ba\u3067\u3042\u308b\u5834\u5408\u30011 \u3064\u305a\u3064\u5909\u63db\u3057\u3066\u3044\u304f\u306e\u304c\u6700\u9069\u306a\u6226\u7565\u3067\u3059\u3002<\/li>\n<\/ul>\n<p><strong>Java \u304b\u3089 Kotlin \u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306e\u8a00\u8a9e\u6a5f\u80fd<\/strong><\/p>\n<p>Kotlin \u306b\u306f\u3001Kotlin \u30b3\u30fc\u30c9\u304c\u30cd\u30a4\u30c6\u30a3\u30d6\u306e Java \u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u5404\u7a2e\u306e\u6a5f\u80fd\uff08\u4e3b\u306b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\uff09\u304c\u5099\u308f\u3063\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306f\u3001Kotlin \u3068 Java \u304c\u540c\u3058\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u5185\u306b\u5171\u5b58\u3059\u308b\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u74b0\u5883\u3067\u7279\u306b\u6709\u7528\u3067\u3059\u3002<br \/><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Person @JvmOverloads constructor(val name: String,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var age: Int = 0) {\n\u00a0 companion object {\n\n\u00a0 @JvmStatic\n\u00a0 @Throws(InvalidNameException::class)\n\u00a0 fun newBorn(name: String): Person = if (name.isEmpty())\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw InvalidNameException(\"name not set\")\n\u00a0\u00a0\u00a0\u00a0\u00a0else Person(name, 0)\n\n\u00a0\u00a0\u00a0@JvmField\n\u00a0\u00a0\u00a0val LOG = LoggerFactory.getLogger(KPerson.javaClass)\n\u00a0\u00a0}\n}<\/pre>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/thanks to @JvmOverloads an additional constructor is created, propagating Kotlin\u2019s default arguments to Java\nvar john =\u00a0 new Person(\"John\");\n\n\/\/Kotlin automatically generates getters (val) and setters (var) for Java\njohn.setAge(23);\nvar name = ken.getName();\n\n\/\/@JvmStatic and @JvmField all accessing (companion) object fields and methods as statics in Java\n\n\/\/Without @JvmStatic it would be: Person.Companion.newBorn(...)\nvar ken =\u00a0 Person.newBorn(\"Ken\");\u00a0\n\n\/\/Without @JvmField it would be: Person.Companion.LOG\nPerson.LOG.info(\"Hello World, Ken ;-)\");\n\n\/\/@Throws(...) will put the checked Exception in the method signature \ntry {\n\u00a0 Person ken =\u00a0 Person.newBorn(\"Ken\");\n} catch (InvalidNameException e) {\n\u00a0 \/\/\u2026\n}<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@file:JvmName(\"Persons\")\npackage org.abc\n\n@JvmName(\"prettyPrint\")\n\nfun Person.pretty() =\n\u00a0 \u00a0 \u00a0 Person.LOG.info(\"$name is $age old\")<\/pre>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/@JvmName for files and methods makes accessing static fields look like Java: without it would be: PersonKt.pretty(...)\nPersons.prettyPrint(ken)<\/pre>\n<p><strong>IntelliJ IDEA \u306e Java \u304b\u3089 Kotlin \u3078\u306e\u5909\u63db\u30c4\u30fc\u30eb<\/strong><\/p>\n<p>IntelliJ IDEA \u306b\u306f Java \u304b\u3089 Kotlin \u3078\u306e\u5909\u63db\u30c4\u30fc\u30eb\u304c\u5099\u308f\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u7406\u5c48\u306e\u4e0a\u3067\u306f\u30c4\u30fc\u30eb\u306b\u5909\u63db\u3092\u4efb\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u751f\u6210\u3055\u308c\u308b\u30b3\u30fc\u30c9\u306f\u5b8c\u74a7\u3068\u8a00\u3048\u308b\u3082\u306e\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u305f\u305f\u304d\u53f0\u3068\u3057\u3066\u306e\u307f\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002 \u305d\u306e\u5f8c\u3001\u3088\u308a Kotlin \u98a8\u306e\u8868\u73fe\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u3002 \u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u306e\u9023\u8f09\u306e\u6700\u5f8c\u3068\u306a\u308b\u300c<em>\u5927\u898f\u6a21\u306a Kotlin \u306e\u5c0e\u5165\u3092\u5b9f\u73fe\u3059\u308b\u6210\u529f\u8981\u56e0<\/em>\u300d\u3067\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002<\/p>\n<p>Java \u304b\u3089\u59cb\u3081\u305f\u5834\u5408\u306f Java \u30e9\u30a4\u30af\u306a Kotlin \u3092\u66f8\u304f\u53ef\u80fd\u6027\u304c\u9ad8\u304f\u306a\u308a\u3001\u5e7e\u5206\u304b\u306e\u30e1\u30ea\u30c3\u30c8\u306f\u3042\u308b\u3082\u306e\u306e\u3001Kotlin \u306e\u6f5c\u5728\u7684\u306a\u80fd\u529b\u306f\u767a\u63ee\u3055\u308c\u307e\u305b\u3093\u3002 \u305d\u306e\u305f\u3081\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u65b0\u898f\u306b\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\">\u3053\u306e\u9023\u8f09\u306e\u6b21\u306e\u8a18\u4e8b<\/h3>\n<p>\u300c<em>Java \u4e3b\u4f53\u306e\u74b0\u5883\u3067 Kotlin \u306e\u5c0e\u5165\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306e\u7a76\u6975\u30ac\u30a4\u30c9<\/em>\u300d\u30d6\u30ed\u30b0\u9023\u8f09\u8a18\u4e8b\u306e\u3053\u306e\u56de\u3067\u306f\u3001Kotlin \u306e\u5b9f\u9a13\u304c\u672c\u756a\u74b0\u5883\u306e\u30b3\u30fc\u30c9\u306b\u9032\u5316\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002 \u6b21\u306e\u8a18\u4e8b\u3067\u306f\u3001\u95a2\u4fc2\u8005\u306e\u8aac\u5f97\u3068\u3044\u3046\u5c0e\u5165\u6642\u306e\u4eba\u7684\u5074\u9762\u306b\u6ce8\u76ee\u3057\u307e\u3059\u3002 \u660e\u78ba\u3067\u30b3\u30fc\u30c9\u4e3b\u5c0e\u306e\u8b70\u8ad6\u3092\u63d0\u793a\u3057\u3001\u65b0\u3057\u3044\u958b\u767a\u8005\u3092\u30ac\u30a4\u30c9\u3057\u3001\u5c0f\u898f\u6a21\u306a\u304c\u3089\u3082\u6301\u7d9a\u53ef\u80fd\u306a Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u30c1\u30fc\u30e0\u5185\u306b\u4f5c\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u30aa\u30ea\u30b8\u30ca\u30eb\uff08\u82f1\u8a9e\uff09\u30d6\u30ed\u30b0\u6295\u7a3f\u8a18\u4e8b\u306e\u4f5c\u8005\uff1a<\/strong><\/p>\n<div class=\"about-author \">\n<div class=\"about-author__box\">\n<div class=\"row\">\n<div class=\"about-author__box-img\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/a3f7-400o400o1-QYUavRYyARnAVJLCpM1m8M.webp\" alt=\"\" \/><\/div>\n<div class=\"about-author__box-text\">\n<h4>Urs Peter<\/h4>\n<p>Urs \u306f\u7d4c\u9a13\u8c4a\u5bcc\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a8\u30f3\u30b8\u30cb\u30a2\u3001\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c8\u3001\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u8b1b\u6f14\u8005\u3001\u30c8\u30ec\u30fc\u30ca\u30fc\u3067\u3042\u308a\u3001\u4e3b\u306b Kotlin \u3068 Scala \u304c\u95a2\u308f\u308b\u30ec\u30b8\u30ea\u30a8\u30f3\u30c8\u3067\u62e1\u5f35\u53ef\u80fd\u3001\u304b\u3064\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u306b 20 \u5e74\u4ee5\u4e0a\u643a\u308f\u3063\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u30b3\u30f3\u30b5\u30eb\u30bf\u30f3\u30c8\u696d\u306e\u508d\u3089\u3001Kotlin \u3068 Scala \u306e\u8a00\u8a9e\u30b3\u30fc\u30b9\u304b\u3089\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3084\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u578b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3044\u3063\u305f\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u95a2\u9023\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u306b\u81f3\u308b\u591a\u7a2e\u591a\u69d8\u306a\u30b3\u30fc\u30b9\u306e\u30c8\u30ec\u30fc\u30ca\u30fc\u3068\u4f5c\u6210\u8005\u3068\u3057\u3066\u3082\u60c5\u71b1\u7684\u306b\u6d3b\u52d5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u5143\u3005\u4eba\u3068\u306e\u4ea4\u6d41\u3092\u597d\u3080\u6027\u683c\u3067\u3042\u308a\u3001\u30df\u30fc\u30c8\u30a2\u30c3\u30d7\u3084\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3067\u4ed6\u306e\u958b\u767a\u8005\u3068\u77e5\u8b58\u3092\u5171\u6709\u3057\u3001\u523a\u6fc0\u3057\u5408\u3046\u3053\u3068\u3092\u697d\u3057\u3093\u3067\u3044\u307e\u3059\u3002 Urs \u306f JetBrains \u8a8d\u5b9a Kotlin \u30c8\u30ec\u30fc\u30ca\u30fc\u3067\u3059\u3002<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/08\/photo_2021-08-03_15-27-43-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Alyona Chernyaeva\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Alyona Chernyaeva<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1394,"featured_media":672598,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672593"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/1394"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=672593"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672593\/revisions"}],"predecessor-version":[{"id":674907,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672593\/revisions\/674907"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media\/672598"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=672593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=672593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=672593"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=672593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}