--- id: java-generics title: "Java Generics" category: "Programming_Language" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["자바 제네릭"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.9 created_at: 2026-07-04 updated_at: 2026-07-04 review_reason: "" merge_history: [] tags: ["java", "programming", "w3schools", "generics"] raw_sources: ["https://www.w3schools.com/java/java_generics.asp"] applied_in: [] github_commit: "" --- # [[Java Generics]] ## 🎯 한 줄 통찰 (One-line insight) `` bounds a generic to only numeric wrapper types specifically so `.doubleValue()` becomes callable inside the class — without that bound, `T` could be any type (including one with no `doubleValue()` method), so the bound isn't just a restriction, it's what makes the generic method's body compile at all. [S1] ## 🧠 핵심 개념 (Core concepts) - **Generics** — write classes/interfaces/methods that work across data types without fixing the type in advance. [S1] - **Benefits** — code reusability (one class/method, many types), type safety (compile-time error catching), cleaner code (no manual casting). [S1] - **Type parameter ``** — a placeholder; becomes concrete (String, Integer, etc.) at usage site. [S1] - **Generic class** — `class Box { T value; ... }`. [S1] - **Generic method** — `public static void printArray(T[] array) { ... }`. [S1] - **Bounded types** — `` restricts T to Number subclasses, enabling numeric methods like `.doubleValue()` inside the class body. [S1] - **Used internally by Collections** — `ArrayList`, `HashMap` are themselves generic. [S1] ## 📖 세부 내용 (Details) - Generic class: `class Box { T value; void set(T value) { this.value = value; } T get() { return value; } } ... Box stringBox = new Box<>(); Box intBox = new Box<>();`. [S1] - Generic method: `public static void printArray(T[] array) { for (T item : array) { System.out.println(item); } } ... printArray(names); printArray(numbers);`. [S1] - Bounded generic: `class Stats { T[] nums; double average() { double sum = 0; for (T num : nums) { sum += num.doubleValue(); } return sum / nums.length; } }` — works for both `Integer[]` and `Double[]`. [S1] ## ⚖️ 모순 및 업데이트 (Contradictions & updates) 소스에서 모순되는 정보는 발견되지 않음. ## 🛠️ 적용 사례 (Applied in summary) 현재 발견된 실제 적용 사례가 없습니다 — Integer/Double 배열 모두에 동작하는 평균 계산(Stats)이 경계 제네릭의 대표 실전 사례다. [S1] ## 💻 코드 패턴 (Code patterns) Bounded generic class computing average for any Number subtype (Java): ```java class Stats { T[] nums; Stats(T[] nums) { this.nums = nums; } double average() { double sum = 0; for (T num : nums) { sum += num.doubleValue(); } return sum / nums.length; } } ``` ## ✅ 검증 상태 및 신뢰도 - **상태:** draft - **검증 단계:** conceptual - **출처 신뢰도:** B (W3Schools — widely used educational reference, not a primary standards body) - **신뢰 점수:** 0.90 - **중복 검사 결과:** 신규 생성 (New discovery) ## 🔗 지식 그래프 (Knowledge Graph) - **상위/루트:** [[Java Tutorial]] - **관련 개념:** [[Java Wrapper Classes]], [[Java ArrayList]], [[Java Annotations]] - **참조 맥락:** 타입 안전한 재사용 가능 코드 — Annotations 챕터로 이어짐. ## 📚 출처 (Sources) - [S1] W3Schools — Java Generics — https://www.w3schools.com/java/java_generics.asp ## 📝 변경 이력 (Change history) - 2026-07-04: Initial draft synthesized from the W3Schools "Java Generics" page (Astra wiki-curation, P-Reinforce v3.1 format).