<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Santosh Ravi Teja Goteti</title>
    <description>The latest articles on DEV Community by Santosh Ravi Teja Goteti (@santosh_ravitejagoteti_).</description>
    <link>https://dev.to/santosh_ravitejagoteti_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3943050%2F42608c1c-0bf6-4051-8458-e90cd2048453.png</url>
      <title>DEV Community: Santosh Ravi Teja Goteti</title>
      <link>https://dev.to/santosh_ravitejagoteti_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/santosh_ravitejagoteti_"/>
    <language>en</language>
    <item>
      <title>I built a Claude Code skill that scores your legacy Java code 1–100 and modernizes it to Java 21</title>
      <dc:creator>Santosh Ravi Teja Goteti</dc:creator>
      <pubDate>Thu, 21 May 2026 00:59:53 +0000</pubDate>
      <link>https://dev.to/santosh_ravitejagoteti_/i-built-a-claude-code-skill-that-scores-your-legacy-java-code-1-100-and-modernizes-it-to-java-21-2jee</link>
      <guid>https://dev.to/santosh_ravitejagoteti_/i-built-a-claude-code-skill-that-scores-your-legacy-java-code-1-100-and-modernizes-it-to-java-21-2jee</guid>
      <description>&lt;h2&gt;
  
  
  The problem with Java 8 → Java 21 migrations
&lt;/h2&gt;

&lt;p&gt;If you're working on a Java 8 codebase — or trying to break into banking and legacy system roles — this article is for you. Every Java 8 codebase has the same problems. You know they exist, but finding and fixing them across 50,000 lines is slow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;double&lt;/code&gt; for monetary values → silent FX
precision loss in production&lt;/li&gt;
&lt;li&gt;Unguarded &lt;code&gt;order.getCounterparty().getAccount(
).getBalance()&lt;/code&gt; → NPE in settlement&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;synchronized&lt;/code&gt; HashMap → race conditions under
concurrent trade load&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Executors.newFixedThreadPool(200)&lt;/code&gt; →
bottleneck at peak volume&lt;/li&gt;
&lt;li&gt;60-line DTOs with manual equals/hashCode →
noise hiding domain logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;A two-skill Claude Code plugin that acts as a&lt;br&gt;
  Senior Java Architect:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skill 1 — &lt;code&gt;/java-modernization-review&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
  Analyzes your Java file, saves a full report to&lt;br&gt;
  &lt;code&gt;analysis.md&lt;/code&gt;, and stops.&lt;br&gt;
  You review it before any code is touched.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skill 2 — &lt;code&gt;/java-modernization-implement&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
  Reads &lt;code&gt;analysis.md&lt;/code&gt;, applies every change,&lt;br&gt;
  writes &lt;code&gt;*Modern.java&lt;/code&gt; alongside&lt;br&gt;
  the original. Never overwrites your file.&lt;/p&gt;
&lt;h2&gt;
  
  
  The scoring system
&lt;/h2&gt;

&lt;p&gt;Every review produces a Before/After score&lt;br&gt;
  across 9 dimensions (100 points total):&lt;/p&gt;

&lt;p&gt;## Scoring breakdown (100 points total)&lt;/p&gt;

&lt;p&gt;🔴 &lt;strong&gt;NPE prevention&lt;/strong&gt; — 15 pts&lt;br&gt;
  🔴 &lt;strong&gt;Monetary precision (BigDecimal)&lt;/strong&gt; — 15 pts&lt;br&gt;
  🔴 &lt;strong&gt;Thread safety&lt;/strong&gt; — 15 pts&lt;br&gt;
  🟡 &lt;strong&gt;Streams &amp;amp; collections&lt;/strong&gt; — 10 pts&lt;br&gt;
  🟡 &lt;strong&gt;Exception handling&lt;/strong&gt; — 10 pts&lt;br&gt;
  🟡 &lt;strong&gt;Modern data carriers (Records)&lt;/strong&gt; — 10 pts&lt;br&gt;
  🟡 &lt;strong&gt;Concurrency model (virtual threads)&lt;/strong&gt; — 10 pts&lt;br&gt;
  🟡 &lt;strong&gt;Modern Java features&lt;/strong&gt; — 10 pts&lt;br&gt;
  🟢 &lt;strong&gt;Financial domain rules&lt;/strong&gt; — 5 pts&lt;/p&gt;
&lt;h2&gt;
  
  
  Real example: TradeProcessor.java
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Legacy code the skill flagged as critical:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// C1 — NPE: any of these can be null&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCounterparty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getAccount&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getB&lt;/span&gt;
  &lt;span class="n"&gt;alance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt; &lt;span class="c1"&gt;// C2 — Precision loss on every FX trade&lt;/span&gt;
 &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFxRate&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// C2 — Precision loss on every FX trade&lt;/span&gt;
 &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFxRate&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt; &lt;span class="c1"&gt;// C3 — Race condition on position updates&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Double&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;positionMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;synchronized&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;updatePosition&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;Double&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;positionMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;positionMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// C4 — Swallowed settlement failure&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// TODO: handle later&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;After /java-modernization-implement:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// C1 fixed — Optional chain, no NPE possible&lt;/span&gt;
 &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="nf"&gt;getCounterpartyBalance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofNullable&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;Order:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;getCounterparty&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;Counterparty:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;getAccount&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;Account:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;getBalance&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;orElseThrow&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Account balance unavailable"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// C2 + C3 fixed — BigDecimal stream + lock-free map&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;BigDecimal&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;positionMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
  &lt;span class="nc"&gt;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;updatePosition&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;counterparty&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;BigDecimal&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;positionMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;merge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counterparty&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;BigDecimal:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Java 21 — virtual threads&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ExecutorService&lt;/span&gt; &lt;span class="n"&gt;executor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Executors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newVirtualThreadPerTaskExecutor&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Score: 3/100 → 95/100 (+92 points)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;What it covers — every Java release from 9 to 21&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Priority 1 — Streams, Optional, method references&lt;/li&gt;
&lt;li&gt;Priority 2 — var, helpful NPE messages, built-in HTTP client (Java 9–11)&lt;/li&gt;
&lt;li&gt;Priority 3 — Records, sealed classes, pattern matching, text blocks (Java 12–16)&lt;/li&gt;
&lt;li&gt;Priority 4 — Virtual threads, structured concurrency, lock-free atomics (Java 17–21)&lt;/li&gt;
&lt;li&gt;Priority 5 — String templates, type inference improvements (Java 18–21)&lt;/li&gt;
&lt;li&gt;Priority 6 — Date→java.time, StringBuffer→StringBuilder, reactive→virtual threads&lt;/li&gt;
&lt;li&gt;Priority 7 — Module system (module-info.java)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Two-step workflow — review before any code changes
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Step 1 — /java-modernization-review&lt;/strong&gt;&lt;br&gt;
    → Analyzes file&lt;br&gt;
    → Saves analysis.md&lt;br&gt;
    → Stops and waits for your approval&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — /java-modernization-implement&lt;/strong&gt;&lt;br&gt;
    → Reads analysis.md&lt;br&gt;
    → Applies every change&lt;br&gt;
    → Writes *Modern.java (original untouched)&lt;br&gt;
    → Prints final score + delta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Install in Claude Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;/plugin marketplace add Santoshrt999/Java-Claude-Skills&lt;/li&gt;
&lt;li&gt;  /plugin install java-claude-skills@java-modernization-review&lt;/li&gt;
&lt;li&gt;  /plugin install java-claude-skills@java-modernization-implement&lt;/li&gt;
&lt;li&gt;  /reload-plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full source code and the TradeProcessor example are in the repo:&lt;br&gt;
  👉 &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Santoshrt999" rel="noopener noreferrer"&gt;
        Santoshrt999
      &lt;/a&gt; / &lt;a href="https://github.com/Santoshrt999/Java-Claude-Skills" rel="noopener noreferrer"&gt;
        Java-Claude-Skills
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Claude Code skill: review and modernize legacy Java 8 code to Java 21 with AI. Generates a 1-100 score. Specialized for financial systems.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Java Claude Skills — Java 8 → Java 21 Modernization for Claude Code&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI-powered Java code modernization skill for &lt;a href="https://claude.ai/code" rel="nofollow noopener noreferrer"&gt;Claude Code&lt;/a&gt;.&lt;/strong&gt;&lt;br&gt;
Analyzes legacy Java, generates a prioritized upgrade report, scores it 1–100, and applies every change — all inside your editor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0aa106087bc40725f30c1c025723497c13754b0bd2ab78037a4ae7cd1d7c03d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d3825323025453225383625393225323032312d6f72616e67653f6c6f676f3d6f70656e6a646b"&gt;&lt;img src="https://camo.githubusercontent.com/0aa106087bc40725f30c1c025723497c13754b0bd2ab78037a4ae7cd1d7c03d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d3825323025453225383625393225323032312d6f72616e67653f6c6f676f3d6f70656e6a646b" alt="Java"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d486bad36448b299f5e146787ce434ceeb3db948ecbc592f628ef57dc2507345/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436c61756465253230436f64652d536b696c6c2d626c756576696f6c65743f6c6f676f3d616e7468726f706963"&gt;&lt;img src="https://camo.githubusercontent.com/d486bad36448b299f5e146787ce434ceeb3db948ecbc592f628ef57dc2507345/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436c61756465253230436f64652d536b696c6c2d626c756576696f6c65743f6c6f676f3d616e7468726f706963" alt="Claude Code"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e" alt="License"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/863b917f6acbe825373254ba8f25e61adb9a8c660ebf6bf566c70ecdb9e7adfd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6d61696e2d46696e616e6369616c25323053797374656d732d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/863b917f6acbe825373254ba8f25e61adb9a8c660ebf6bf566c70ecdb9e7adfd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6d61696e2d46696e616e6369616c25323053797374656d732d626c7565" alt="Financial Systems"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why this skill?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Migrating Java 8 code to Java 21 is high-value but tedious — every codebase has the same problems:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;double&lt;/code&gt; for monetary values&lt;/td&gt;
&lt;td&gt;Silent precision loss on every FX calculation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unguarded chained &lt;code&gt;.get()&lt;/code&gt; calls&lt;/td&gt;
&lt;td&gt;NPE crashes in production settlement flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;synchronized&lt;/code&gt; HashMap&lt;/td&gt;
&lt;td&gt;Race conditions on position updates under load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed thread pools&lt;/td&gt;
&lt;td&gt;Bottleneck at 200–500 concurrent trades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boilerplate DTOs with 60+ lines&lt;/td&gt;
&lt;td&gt;Noise that obscures domain logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This skill acts as a &lt;strong&gt;Senior Java Architect&lt;/strong&gt; in your Claude Code session. It knows every Java feature from 8 through 21, enforces financial-domain safety rules, and produces code you can ship — not just advice.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Skills&lt;/h2&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Santoshrt999/Java-Claude-Skills" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Again, if you're working on a Java 8 codebase — or trying to break into banking and legacy system roles — this repo is built for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The financial domain examples are intentional: trade processors, FX arithmetic, position maps, settlement logic. That's the code you'll actually face in banking interviews and on the job. Practice modernizing it here before you touch production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Curious what scores you're seeing on your own codebases. Drop them in the comments.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>java</category>
      <category>claudecode</category>
      <category>ai</category>
      <category>fintech</category>
    </item>
  </channel>
</rss>
