Tag: 注释

在使用URLClassLoader加载的类上可靠地查找注释

我有一个代码生成器,它使用URLClassLoader来加载指定路径上的类,扫描它们以获取注释,然后在字段/方法上使用Reflection,生成DTO。 它在测试应用程序中运行良好。 当我把它放入Maven MOJO时,我突然失去了在类上看到javax.persistence.Entity注释的能力。 它加载它们,它可以看到所有字段,但实体注释不再可见。 我假设这与Classpath问题有关 – 是吗? 测试应用程序(插件本身中的main()函数)或MOJO都不是扫描类所来自的项目的一部分。 但是一个有效,另一个没有。 我有一些调试代码在检查它时打印出类上的所有注释,而在非运行版本中它找不到任何注释。 我是如何调试问题/解决它的?

java.lang.Object的Eclipse外部null注释#getClass()

我正在使用Eclipse Mars中提供的外部null注释工具。 我正在尝试为java.lang.Object#getClass()添加外部注释,但似乎无法使签名正确。 我尝试了以下变化: @NonNull Class getClass() [()L1java/lang/Class;] @NonNull Class getClass() [()L1java/lang/Class;] 但是在将调用getClass()的结果传递给接受Class实例的方法时会继续收到警告,其中该参数使用@NonNull注释。 下面是重现问题的最小Eclipse Mars项目的相关文件(此示例使用上面的第一个null注释变体,但在使用第二个变体时我也得到相同的警告): 适用于Windows 64位的Eclipse Mars Release(4.5.0; 20150621-1200) Oracle JDK 1.8.0_60 SRC /酒吧/ Foo.java package bar; public class Foo { private static void printType(Class type) { System.out.println(type.getName()); } public static void main(String[] args) { Foo foo = new Foo(); printType(foo.getClass()); } } SRC […]

如何使用带有dropwizard的自定义validation器?

我有一个由其他人编写的REST api,其中处理对特定url的请求的方法接受从路径参数填充的一堆参数。 @POST @Path(“/{classid}/{studentid}/details”) @Consumes(MediaType.MULTIPART_FORM_DATA) @SuppressWarnings(“unchecked”) public Response processFile(@FormDataParam(“sourceFile”) InputStream aStream, @PathParam(“classid”) String classId, @PathParam(“studentid”) String studentId, @Context HttpServletRequest httpRequest) { // Code to do stuff and return a response } 写这篇文章的人使用了DropWizard,我以前没有使用它的经验。 我的任务是通过将studentId字段与db中的值进行比较来validationstudentId字段。 这将非常简单,但我被告知要使用自定义validation器。 我对编写注释很新,但经过多次挖掘写了这样的注释, @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = StudentIdValidator.StudentIdValidation.class) public @interface StudentIdValidator { String message() default “{Invalid Id}”; Class[] groups() default {}; Class[] […]

jackson注释被忽略了

我正在尝试使用Jackson注释来重命名序列化期间生成的一些json标签。 所有注释都编译良好,当我运行时,jackson序列化工作除了所有jackson注释完全被忽略。 甚至像@JsonIgnore或@JsonProperty这样的基本对json响应也没有影响。 我在构建路径中的库是: jsr311-qpi-1.1.1.jar jackson-[core|databind|annotations]-2.2.0.jar 我正在Eclipse中运行jetty外部程序,外部程序设置如下: Location: …/apache-maven-2.2.1/bin/mvnDebug.bat working Directory: ${workspace_loc:/ohma-rest-svr} Arguments: jetty:run 将远程Java应用程序配置设置为: Host: localhost Port: 8000 没有错误消息可以使用,我有点失去了尝试的东西。 任何想法,将不胜感激。 这是我需要序列化的类的一些代码示例: @XmlRootElement(name=”ads-parameter”) public class DefineParameterResponse { private Date _createdAt = new Date(); @JsonProperty(“created-at”) @JsonFormat(shape=JsonFormat.Shape.STRING, pattern=”yyyy-MM-dd,HH:00″, timezone=”CET”) @XmlElement public String getCreatedAt() { return new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss’Z'”).format(_createdAt); } @JsonProperty(“created-at”) public void setCreatedAt(Date createdAt) { this._createdAt = createdAt; […]

如何在调用方法之前将方法称为被动方法

像这样:一个类有一个名为sayHello()的方法。 当类的实例调用sayHello()时,在调用sayHello()之前,另一个类中的方法被称为自动。 示例代码可以是这样的: public class Robot{ public static void doSomethingBefore(){ System.out.println(“Do something before sayHello”); } } public class Person { public void sayHello(){ System.out.println(“hello”); } public static void main(String[] args){ Person p = new Person(); p.sayHello(); } } 输出结果: Do something before sayHello hello 似乎可以通过使用代理模式来完成。 但我希望它可以更简单。 使用注释: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface MethodListener { public String […]

有没有办法知道在Jersey @__Param fromString处理程序中解析哪个参数?

我正在使用的API已经决定接受UUID作为Base32编码的字符串,而不是UUID.fromString()期望的标准hex,短划线分隔格式。 这意味着我不能简单地将@QueryParam UUID myUuid写为方法参数,因为转换会失败。 我正在通过使用不同的fromString转换器编写自定义对象来解决这个问题,以便与Jersey @QueryString和@FormParam注释一起使用。 我希望能够在fromString方法中访问转换的上下文,以便我可以提供更好的错误消息。 现在,我所能做的就是以下几点: public static Base32UUID fromString(String uuidString) { final UUID uuid = UUIDUtils.fromBase32(uuidString, false); if (null == uuid) { throw new InvalidParametersException(ImmutableList.of(“Invalid uuid: ” + uuidString)); } return new Base32UUID(uuid); } 我希望能够公开哪个参数具有无效的UUID,因此我记录的exception和返回的用户错误非常清楚。 理想情况下,我的转换方法会有一个额外的参数用于细节,如下所示: public static Base32UUID fromString( String uuidString, String parameterName // New parameter? ) { final UUID uuid […]

为什么Java中没有@Implements注释?

我发现@Override注释非常有用,同时覆盖了派生类中的一些超类方法。 基本上编译器会在早期检测到程序中的缺陷,这总是一件好事。 但为什么Java中没有@Implements注释?

由注释限定的有界类型参数

在Java中,可以使得bounder类型参数必须从特定类或接口扩展,例如 public class Box { T t … } 反正我是否可以通过注释绑定,以便T的值只能是具有特定注释的类?

使用Java注释 – 生成代码

我正在使用java 6注释处理api。 我已经按照以下优秀教程创建了一个在构建时显示消息的注释处理器: http://kerebus.com/2011/02/using-java-6-processors-in-eclipse/ 但是,就我而言,我有一个简单的类: import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(value = ElementType.METHOD) public @interface Criteria { String id(); double width(); double height(); } 如您所见,上述注释在运行时使用元注释“Retention”提供给JVM。 我在另一个类的源代码中使用这个“Criteria”注释来注释一个方法,如下所示: @Criteria(id = “fooBar”, width = 22, height = 10 ) public void fooStream() { System.out.println(“foo stream method”); } 在运行时,我想在另一个类中包含’fooStream’方法,仅当传入的变量与@Criteria注释中的元素值匹配时,即’width’和’height’。 我的问题是,如何在运行时将方法’fooStream’并将其注入另一个类? 这有可能吗? 我不是在寻找任何代码示例,只是回答上述两个问题。 此外,在顶部的链接中,有一个使用’JavaFileObject’和’Writer’实例生成代码的示例,其中生成的代码作为字符串传递。

这些Java注释有什么function?

我还不清楚Java中注释的目的。 最初我认为他们只是作为文档。 但是从Google App Engine数据存储区查看此文档,我不太确定。 @PersistenceCapable(identityType = IdentityType.APPLICATION)看起来更像是方法签名。 这种注释的目的是什么? 它有什么作用? import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Employee { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String firstName; @Persistent private String lastName; @Persistent private Date hireDate; public Employee(String firstName, String lastName, Date hireDate) […]