【far 语言】注解系统
本文是「far 语言」系列文档之一,总目录见《【far 语言】语言文档目录》。
注解系统
Far 注解为 Java 风格:
@名字或@名字(参数...),注解名首字母必须大写。
使用注解
@Extern("c", "strlen") // 内建注解:FFI 声明外部 C 函数
static long strlen(RawPtr<AbiChar> s);
@Retention(RUNTIME) // 保留策略:运行期保留
@Component // 自定义注解
class OrderController { ... }
保留策略
| 级别 | 语义 |
|---|---|
| SOURCE(默认) | 编译期消费,编译后彻底消失(如 @Extern) |
| RUNTIME | @Retention(RUNTIME) 标记 → 编译期生成元数据表 → 运行期反射读取 |
自定义注解(仿 Java @interface)
@Retention(RUNTIME) // 保留策略(应用到注解类型声明)
@Target(CLASS, METHOD, FIELD) // 目标限定(默认全部允许)
annotation MyAnno {
string name; // 无默认值 = 必填参数
string path = ""; // 有默认值 = 可选参数
}
- 关键字
annotation,注解类型名首字母必须大写。 - 参数类型限
string / long / bool。 @Retention/@Target仅允许出现在注解类型声明前。@Target目标:CLASS/METHOD/FIELD。- 注解参数值:字符串/数字/标识符,或编译期纯内置函数调用(
str/toString/toLong/toInt/toDouble/len/size/substr,参数可嵌套,2026-08-23): @Tag(name = str(42), msg = substr("hello", 0, 3))→ 编译期求值为"42"/"hel"- 不支持运算符表达式与非纯函数(注解参数必须编译期常量)
使用自定义注解
@Retention(RUNTIME)
@Target(CLASS)
annotation Component {
string name = "";
}
@Component
class App { ... }
- 未声明的注解名 → 编译报错。
- 目标不匹配(如
@Target(FIELD)标在方法上)→ 编译报错。 - 必填参数缺失 / 参数名不存在 / 值类型不匹配 → 编译报错。
运行期反射 API
// 顶层函数(需 @Retention(RUNTIME) 才可读)
hasAnnotation(类名, 方法名, 注解名) → bool(方法名空串 = 类级)
getAnnotation(类名, 方法名, 注解名) → string(参数编码串)
annotationArg(类名, 方法名, 注解名, key) → string
annotationsOf(类名, 方法名) → string[](注解名列表)
annotationMap(类名, 方法名, 注解名) → map<string,string>(参数名→值)
Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号