`
yipsilon
  • 浏览: 246263 次
  • 性别: 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 等等。

 

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

分享到:
评论
14 楼 leeldy 2009-02-12  
汗。。。
这样的话就可以实现将自己输出了。。。
13 楼 awdxzc 2009-02-11  
看不懂
12 楼 amozon 2009-02-11  
Groovy String的""".
11 楼 hhhsir 2009-02-11  
我一般看完不回复
看完你的
我忍不住想说一声  你山炮啊 !
10 楼 wangsoft 2009-01-04  
还是不知道作者的意图,暴漏源码获得这么个能力,为啥?
9 楼 徐风子 2008-12-06  
恩,挺有新意的,
如果改成用 异常堆栈去找出调用方法的注解还是有一定实际意义的。
8 楼 llcold2004 2008-10-24  
是个挺不错的想法,写程序换换思路挺好
7 楼 srdrm 2008-10-19  
我倒, 这JAVA玩的, 可真够神的, 真是玩于股掌之间
6 楼 Fly_m 2008-10-19  
思路有点特别,一般人不会想到可以这样来做.可以作其它方式进行改进.S(结构)看着有点别扭.
5 楼 瀚愚 2008-10-18  
还得把源代码带上?
4 楼 fcoffee 2008-10-18  
我只有一个感觉, 搞笑
3 楼 vlinux 2008-10-18  
我想,以后SQL也可以有理由不用StringBuffer拼接得那么辛苦了

在打印debug日志的时候,往往为了tail得方便,我都会用StringBuffer/Builder把SQL语句拼接得好看一些,后来我是把SQL写到xml中,这样不仅方便vi,也能顺利实现目标。

这种方法可能也能对我以后的项目起到一些积极的作用,晕了,我还真不知道可以这样,哇哈哈,不管怎么说,算是学到了一招,谢谢分享。
2 楼 zhouzhao21 2008-10-18  
有什么实际用途,和 log 工具的原理有什么不同?
1 楼 vlinux 2008-10-18  
晕,我还真不知道可以这样!

相关推荐

    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