`
yipsilon
  • 浏览: 244693 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

传说中的Java动态注释?

阅读更多

动态注释是一个有用的功能。它可以使用多行的字符串来指定在行中测试数据并保存到相对应的记录文件中。

 

但是Java本身并不提供动态注释的功能,我已经在Java中实现了一个简单的多行动态注释的功能,下面看看代码:

/**  
 * @param args
 */
public static void main(String[] args) {
  System.out.println(S(/*
    Wow, we finally have
    multiline strings in
    Java! HOOO!*/)); 
}

 
看看控制台输出的内容吧:

                                 Wow, we finally have
                                 multiline strings in
                                 Java! HOOO!


它是怎么工作的呢?

 

好了,开始解答... 首先,得把源代码文件放到classpath下,然后用下面的代码就可以实现啦:

public static String S() {
  StackTraceElement element = new RuntimeException().getStackTrace()[1];
  String name = element.getClassName().replace('.', '/') + ".java";
  InputStream in = getClassLoader().getResourceAsStream(name);
  String s = convertStreamToString(in, element.getLineNumber());
  return s.substring(s.indexOf("/*")+2, s.indexOf("*/"));
}

 
很显然滴,这个代码没有进行修整和优化,但这仅仅是实现我当前的想法,测试是可以运行的,这就足够了。

或许,它可以加入一些更酷的功能,例如 Groovy、BeanShell 等等。

 

大家有什么想法,一起来参与讨论哟~

分享到:
评论
34 楼 快乐柠檬 2009-10-16  
我只是想回帖
33 楼 solonote 2009-09-28  
这个看起来像GWT的native方法。。。
32 楼 yipsilon 2009-09-28  
WenBin_Zhou 写道
很有创意 一般人不会去注意异常站

如果是我 我会利用反射 获取类信息 再用io流夺取所需的注释信息

不明白lz  的方法 convertStreamToString()是怎么一回事 请赐教!


都好久啦,代码找不到了。

convertStreamToString(InputStream in, int lineNumber)

就是自动判断数据流字符编码,然后从第lineNumber行读取到代码结束。
31 楼 WenBin_Zhou 2009-09-28  
很有创意 一般人不会去注意异常站

如果是我 我会利用反射 获取类信息 再用io流夺取所需的注释信息

不明白lz  的方法 convertStreamToString()是怎么一回事 请赐教!

30 楼 hoorace 2009-03-02  
逐渐明白了思想的差距,不能不学习一下楼主的创意。
29 楼 徐风子 2009-03-02  
java做多了,越来越感觉还是groovy好呀。
28 楼 jamesqiu 2009-02-20  
我觉得还不如这样: 使用配置文件如纯文本或groovy文件来定义多行的字符串, 在java类中解析读入就可以了
27 楼 aninfeel 2009-02-19  
感觉只是很有意思而已。
26 楼 yellu 2009-02-19  
log4j获取打log的类名就是这种方式
25 楼 drinkjava 2009-02-18  
想了好久,好想也只有这个实际用处:
在java源码中是不支持多行字符串的, 必须用+号连起来
如"abcd\r\n"+"efgh"\r\n"+"ijkl",很麻烦,用这个方法就可以写成
/*abcd
efgh
ijkl*/
可以省点事,特别是从别的地方拷来大段的文本片段时,可以不做处理直接贴到代码中。
24 楼 wenrousun 2009-02-16  
我没看懂....lz说的把源码放到classpath下,是什么意思呢?
23 楼 wunan320 2009-02-16  
没有回帖的习惯。见了lz的文章实在忍不住了,这是技术版还是搞笑版。
22 楼 linliangyi2007 2009-02-15  
把java源文件当作txt一样读入,然后做字符截取或者替换,再输出。。。
我认真的看了,但没有明白是啥意思
21 楼 sonsyboy 2009-02-15  
嗯,学习一下改变思路!
20 楼 yingfang05 2009-02-15  
这样玩还真是够强啊,不过个人感觉意义不是很大
19 楼 liufeng820 2009-02-13  
实在是乐的前仰后合.楼主你太搞笑了...
18 楼 jltest 2009-02-13  
太有才了。。。。
17 楼 wdlfellow 2009-02-13  
另一种思路吧,赞一个,虽然用处不是很大!
16 楼 sdh5724 2009-02-13  
还是直接用PHP写代码吧, 用什么JAVA啊
15 楼 mewleo 2009-02-12  
你动了,注释没动啊!

相关推荐

    java汉诺塔小游戏

    描述中提到“适合初学者学习”,这意味着源码应该包含清晰的代码结构和注释,便于初学者理解和学习。对于初学者来说,理解递归算法可能是挑战之一,因为递归涉及到函数调用自身来解决问题。在汉诺塔问题中,递归是...

    汉诺塔 java版

    汉诺塔游戏是一种经典的逻辑谜题,源自印度的古老传说,玩家需要将盘子从一个柱子移动到另一个柱子,遵循三个简单的规则:每次只能移动一个盘子;大盘子不能放在小盘子上面;必须将所有盘子移动到目标柱子。在Java...

    Dj 传说中最好的反编译器 .class反编译器

    Dj,被誉为传说中的最佳反编译器,是Java开发者在探索未知代码时的重要工具。 Dj反编译器,全称为Davaaj Java Decompiler,它能将字节码级别的.class文件转换回可读性较高的Java源代码。这对于学习、调试、逆向工程...

    利用java写的约瑟夫环

    约瑟夫环问题,也称为约瑟夫斯问题,是一个著名的理论问题,源自古罗马的传说。在数学和计算机科学领域,它被用来探讨和展示各种数据结构和算法的解决方案。这个问题的基本设置是:一群人站成一个圆圈,从某个人开始...

    java swing汉诺塔窗体小游戏

    9. **注释**: 由于是教学项目,代码会有详细的注释,帮助初学者理解每部分代码的作用,学习如何用Java Swing构建窗体应用以及如何实现汉诺塔的逻辑。 `board.gif` 文件可能是游戏中的背景图像或者盘子的图像,用以...

    java汉诺塔小游戏程序源码

    汉诺塔游戏是一种经典的逻辑谜题,源自印度的传说,也被称为河内塔。这个小游戏的目的是将一堆按照大小顺序排列的圆盘从一个柱子(起始柱)移动到另一个柱子(目标柱),遵循以下规则: 1. **每次只能移动一个圆盘*...

    java用netbeans做的汉诺塔游戏

    汉诺塔游戏是一种经典的逻辑谜题,源自印度的传说,玩家需要通过移动盘子将所有盘子从一根柱子(起始柱)移到另一根柱子(目标柱),但每次只能移动一个盘子,并且大盘子不能位于小盘子之上。在Java编程中实现汉诺塔...

    JAVA基础知识及问答

    Java接口中的所有方法默认是`public`的,属性默认为`public static`,一个类可以实现多个接口,但Java不支持多继承。这提供了比单一继承更高的灵活性。 3. **垃圾回收机制**:Java的垃圾回收机制自动管理内存,避免...

    JAVA游戏开发-超炫贪吃蛇源码实现教程.doc

    在文章中,作者提到关键代码部分已经添加了注释,并且承认代码可能不够优雅,主要是为了实现功能,还有很多优化空间。作者鼓励读者尝试并提出改进意见。 此外,作者还分享了游戏的Android版本——《蛇王传说》,并...

    Java写的约瑟夫环

    约瑟夫环问题源于一个古老的传说,讲述的是在战争中,士兵们围成一个圈,按照一定的规则每间隔一定人数就淘汰一人,直到只剩最后一个人为止。这个问题的目标是找到最后一个幸存者的编号。 在Java编程中实现约瑟夫环...

    java汉诺塔代码-综合文档

    这个`java汉诺塔代码.doc`文档可能包含了对以上Java代码的详细解释,包括注释和可能的改进。如果你希望深入学习递归和汉诺塔问题,可以查看这份文档以获取更多见解。此外,还可以尝试修改代码,增加错误处理,或者...

    汉诺塔游戏

    汉诺塔游戏是一种经典的逻辑谜题,源自印度的古老传说,目标是将一叠盘子从一根柱子移动到另一根柱子,遵循简单的规则:每次只能移动一个盘子,且大盘子不能位于小盘子之上。这个Java编程项目旨在帮助初学者了解编程...

    汉诺塔代码

    汉诺塔是一个经典的递归问题,它源自一个古老的印度传说。在这个问题中,有三个柱子和一堆盘子,目标是将所有盘子从第一个柱子(A)移动到第三个柱子(C),每次只能移动一个盘子,并且任何时候大盘子都不能位于小...

    汉诺塔问题演示程序

    汉诺塔问题是一个经典的递归算法问题,源自印度的一个古老传说。它涉及到将一堆圆盘按照大小顺序从一根柱子(起始柱)移动到另一根柱子(目标柱),但每次只能移动一个盘子,并且任何时候大盘子都不能位于小盘子之上...

    数据结构hh.rar_约瑟夫_约瑟夫环

    在计算机科学中,约瑟夫环(Josephus Problem)是一个著名的理论问题,它源自一个古老的传说。该问题的基本设定是:人们站成一个圈,并按顺序报数,每报到特定数字的人会被排除出圈,然后从下一个人继续开始报数,...

    CSC250_Spring2021_HeartOfStoneDeckTracker

    8. **软件工程实践**:遵循良好的编程规范,编写清晰的注释,使用Maven或Gradle进行构建管理和依赖管理,以及编写文档(如README.md)来解释项目的使用和安装方法,都是软件开发过程中的重要环节。 【标签】"Java...

    DragonAPI:RotaryCraft和我的其他Minecraft Mod使用的库,用于集中和简化功能

    "DragonAPI"的命名源于其开发者对强大、复杂的系统的隐喻,就像传说中的龙一样,它拥有强大的功能和广泛的适应性。它依赖于MinecraftForge,这是一个广受欢迎的Minecraft模组开发平台,提供了丰富的API和工具,使得...

    JMETER 断言几种方式

    BeanShell断言使用了BeanShell脚本语言,这是一种与Java语法兼容的轻量级脚本语言。你可以通过以下设置来配置BeanShell断言: - **Name**: 设置断言的名称,以便于识别。 - **Comments**: 添加注释,解释断言的...

    android系统从init进程开始到systemserver启动详细流程

    ##### 3.5 疑问:传说中的zygote进程启动在哪里? `zygote`进程是Android系统中非常重要的一个进程,它负责启动所有基于Dalvik或ART运行的应用程序进程。`zygote`进程的启动是在`init.rc`文件中定义的,具体来说是...

    freemarker命令简介

    Freemarker 是一个用 Java 编写的模板引擎,它基于模板来生成文本输出。这些模板可以是任何格式的纯文本文件,例如:HTML、XML、Java 源代码等。Freemarker 通过指令、内置方法等提供了一套强大的功能集合,使得...

Global site tag (gtag.js) - Google Analytics