惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Last Week in AI
Last Week in AI
月光博客
月光博客
D
DataBreaches.Net
WordPress大学
WordPress大学
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
MyScale Blog
MyScale Blog
C
Check Point Blog
F
Fortinet All Blogs
B
Blog
小众软件
小众软件
Vercel News
Vercel News
罗磊的独立博客
有赞技术团队
有赞技术团队

博客园 - 方东信

【far 语言】语言文档目录 【far 语言】数组 【far 语言】并发编程(协程) 【far 语言】控制流 【far 语言】异常处理 【far 语言】farcc 构建工具 【far 语言】函数 【far 语言】组合与继承 【far 语言】接口与泛型 【far 语言】List 列表 【far 语言】Map 映射 【far 语言】原生内存与 FFI 【far 语言】字符串 【far 语言】语法总览 【far 语言】类型系统 Java 远程调用类,控制类的办法,老了,记不住了。靠 java opc ua 基于s7 音视频:JavaCV 采集桌面画面并显示的方法 pand3d实现服务端渲染并推流 UI弹窗遮罩屏蔽触发事件的处理 far的数据类型 Windows下Tesseract-OCR的安装与使用 LoRA配置 大模型三阶段训练方法(LLaMa Factory) windows系统下anaconda的安装和使用 trl ppo 【手把手从零实现】Qwen2.5-VL:环境配置/功能实验(图片识别理解、目标检测、文字OCR、文档解析、视频理解)/模型微调(MS-Swift 和 LLaMA-Factory) seata 1.8.0 报错大全 Springboot 报错 java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking vLLM部署多模态大模型Qwen2.5-VL-3B-Instruct
【far 语言】注解系统
方东信 · 2026-09-13 · via 博客园 - 方东信

本文是「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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。