- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在学习asm,我发现了两个有趣的api
在 org.objectweb.asm.ClassVisitor
中
/**
* Visits an annotation on a type in the class signature.
*/
public AnnotationVisitor visitTypeAnnotation(int typeRef,
TypePath typePath, String desc, boolean visible);
并在org.objectweb.asm.MethodVisitor
/**
* Visits an annotation on a type in the method signature.
*
*/
public AnnotationVisitor visitTypeAnnotation(int typeRef,
TypePath typePath, String desc, boolean visible);
但是什么情况下我们会使用这两种方法..
我们如何在 java 中生成一个带有类/方法签名中类型注释
的类?
我试试
public @Z Integer testMethod(String testParam)
但是 @Z
仍然被 visitAnnotation 调用而不是 visitTypeAnnotation...
什么情况下 asm 会调用 visitTypeAnnotation?
谢谢~
最佳答案
Type annotations是一项新的 Java 8 功能。为了使注释能够在类型上下文中使用,注释类型本身必须使用 @Target(
ElementType.TYPE_USE
)
进行注释,但请注意,当注释支持目标时METHOD
同时,声明如
public @Z Integer testMethod(String testParam)
是歧义。 Afaik,然后将为方法和返回类型记录注释。同样,像这样的声明
public Integer testMethod(@Z String testParam)
如果 @Z
同时支持 PARAMETER
目标,将会产生歧义。
可以出现仅类型注释的独特用途示例是
public Integer testMethod(List<@Z String> testParam) throws @Z RuntimeException {
return new @Z Integer(testParam.get((@Z int)0));
}
如果与 documentation of MethodVisitor.visitTypeAnnotation
比较您可能会认出 typeRef
列出的可能值。
如果您想知道 METHOD_RECEIVER
是如何被注释的,这是一种新的 Java 8 语法,可能并不为人所知:
class Example {
void instanceMethod(@Z Example this, int firstOrdinaryParameter) {
}
}
在这个例子中,instanceMethod()
的方法接收者类型是@Z Example
而不是Example
,虽然这个区别没有意义到 Java 语言本身。
关于java - ClassVisitor#visitTypeAnnotation 和 MethodVisitor#visitTypeAnnotation 的例子是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29646357/
asm的ClassVisitor中的visitCode方法接受一个字符串类型的调试参数 public final void visitSource(final String file, final S
我正在尝试在 Eclipse 中运行一个使用 java RMI 的项目,但是当我运行它时,它给出了以下错误: java.rmi.ServerError: Error occurred in serve
当我使用Jenkins构建springboot(1.4.0版本)项目时,遇到了一个问题,就是找不到类org.springframework.asm.ClassVisitor。构建错误如下: Cause
我正在学习asm,我发现了两个有趣的api 在 org.objectweb.asm.ClassVisitor 中 /** * Visits an annotation on a type in th
我已经使用 spring-mvc 和 mongodb 作为数据库构建了一个 Web 应用程序。我使用 maven3 构建应用程序。 项目构建成功,但是当应用程序启动时,我在日志中收到以下错误,因为我的
我第一次尝试使用 jersey 的 WebService。下面的代码是我从一些博客中得到的。 当我使用 jersey 客户端尝试 Java Web 服务时,出现以下 500 错误 javax.serv
我正在为我的库编写一个 gradle 插件。 https://github.com/shehabic/sherlock ,我需要在编译时在OkHttp Client的字节码中注入(inject)网络拦
我的 POM 中有这两个依赖项,我认为这是造成此问题的原因,但我尝试了许多不同的方法和更新的版本,但没有任何效果。有人可以帮忙吗?POM.XML org.springfram
我刚刚通过 ubuntu 包管理器安装了 tomcat。我打开日志,首先看到的是一个有趣的异常。 java.lang.NoClassDefFoundError: org/springframework
(原帖)将 hibernate 依赖项添加到 pom.xml 时显示错误 2011-10-11 10:36:53.710::WARN: failed guiceFilter java.lang.No
迁移到 Jersey 2 时我不断收到此错误。起初我以为这是一些 Maven 问题,但看起来并非如此。我不断得到:AnnotatedClassVisitor 将接口(interface) jersey
我正在尝试在web-logic 12c中部署我的遗留应用程序,但问题是每次它都会显示异常,例如>“ClassNotFoundException:org.objectweb.asm.ClassVisit
我正在使用 Jasper Reports 并在我的类路径中使用以下库 jasperreports-4.5.1.jar common-digester3-3.2.jar common-digester2
我将 struts2 版本从 2.5.2 更改为 2.5.10.1,但我开始收到此错误。看起来新版本没有读取任何 Action 类。我需要用它更改任何其他库吗?我的应用程序正常启动,但我在控制台中看到
当我在 Spring 3.2.2 旁边添加 Spring-security 3.1.4 时,我在下面遇到了这个丑陋的异常。我在谷歌上搜索了一下,只得到了这个关于同样错误的链接: http://foru
当我试图在 Eclipse 上的 Spring 中运行一个简单的静态切入点示例时,我遇到了这个错误消息:- java.lang.IncompatibleClassChangeError: class
运行 swagger2 时出现以下异常。我在网上看到这通常是由于引用了同一个 jar 的多个不同版本。但是,我只在我的 gradle jar 文件夹中找到了 org.ow2.asm:asm:5.0.3
我是一名优秀的程序员,十分优秀!