Lobsters | 📄 原文链接 | 2026-10-28 收录

在纯 Java 里跑通 Haskell 式类型类解析

来源:garciat.com — 2026-10

📋 概述

作者想验证 Java 的类型系统能被推到多远:只用反射、泛型元数据和一个小小的一阶 unifier,就能自动解析类型类实例,包括高阶(higher-kinded)实例、重叠实例,以及任意嵌套泛型类型的 witness。文章的动机很具体:Dup 这类容器想实现 eq(),要么给类型参数加上 Equatable 约束(Dup 从此只能接受满足约束的类型),要么运行时 instanceof(对泛型不好用且可能失败),而类型类把"相等"从对象实例挪到类型定义上,用静态工厂返回 Eq 这样的 witness(这个叫法来自 Brian Goetz 的演讲)。实现依赖两个事实:泛型虽然被擦除,但在父接口和匿名类上会具体化,可以用 getGenericInterfaces() 取回;再用一个 Ty 匿名类捕获静态类型。据此把 java.lang.reflect.Type 解析成 AST,做类型统一,从而自动组装 witness。

🔑 核心要点

💡 金句

它揭示了 Java 在运行时实际保留了多少结构,以及在完全不改动语言的前提下,它离类型级编程可以有多近。
← 返回 Lobsters 首页