标签: annotations

在Android Studio 2.2中启用"注释处理器"选项

我正在尝试在我的项目中使用java 8,为此我添加了jack编译器.

启用插孔后,我开始遇到使用注释处理的库的问题,并在Web上查看我读到需要android studio 2.2和com.android.tools.build:gradle:2.2.0-alpha6来编译从注释生成代码的库.

我下载Android Studio 2.2预览版6并将我的项目转换为它.之后我发现不再支持apt gradle插件,然后我需要将使用apt的每个依赖项更改为使用新的annotationProcessor选项.

例如:

apt "org.projectlombok:lombok:$rootProject.lombokVersion"
Run Code Online (Sandbox Code Playgroud)

annotationProcessor "org.projectlombok:lombok:$rootProject.lombokVersion"
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用"make project",项目编译没有问题,但如果我尝试执行它,我的代码应该由注释生成错误.

此外,当我打开项目时,我收到来自lombok插件的警告"注释处理似乎已禁用该项目".当我打开项目设置并转到"构建 - >编译器"时,我找不到注释处理器.

所以,我的问题是:如何在Android Studio 2.2中启用注释处理器?此功能已被禁用?如果是,我如何从注释中生成代码?

--EDIT--我正在制作一个PullRequest来改变用Java8编译的项目,你可以在这里查看PR:https://github.com/jonathanrz/myexpenses-android/pull/57

java android annotations android-studio-2.2

43
推荐指数
5
解决办法
4万
查看次数

为什么我的@BeforeClass方法不能运行?

我有以下代码:

    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        fail("LOL");
    }
Run Code Online (Sandbox Code Playgroud)

以及@Before,@ After,@ Test或@AfterClass方法的各种其他方法.

启动时测试不会失败,因为它似乎应该.有谁可以帮助我吗?

我有JUnit 4.5

该方法在立即调用setUp()时失败,该注释被注释为@before.类def是:

public class myTests extends TestCase {
Run Code Online (Sandbox Code Playgroud)

java junit annotations

42
推荐指数
3
解决办法
3万
查看次数

IntelliJ IDEA在JPQL中使用"无法解析符号"突出显示@Entity类名

IntelliJ IDEA在JPQL中用红色的"无法解析符号"突出显示持久的@Entity类名,这会分散注意力并掩盖实际问题.

因此,例如,我在我的存储库中声明了一个查询:

private static final String READ_BY_CANDIDATE_KEY = "SELECT cr FROM Entity AS cr left join cr.relationship AS re left join fetch cr.relationship2 WHERE re.candidateKey=:ID";
Run Code Online (Sandbox Code Playgroud)

..和"实体"带有下划线,即使"实体"是有效的类名,并且具有@Entity注释.当代码实际运行时,没有问题.

我想要让IDE了解哪些类是有效的,需要某种配置?这个配置是如何完成的?

更新:我确实有一个JPA方面,但它没有看到带注释的类.它似乎需要一个persistence.xml或orm.xml(我的项目不使用)

annotations jpa intellij-idea jpql

42
推荐指数
2
解决办法
3万
查看次数

由于自动装配的字段导致BeanNotOfRequiredTypeException

我还是Spring MVC的新手,在构建我的测试项目时,我从Tomcat日志中收到了这条消息:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'divisionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'adminService' must be of type [employee.service.impl.AdminServiceImpl], but was actually of type [$Proxy52]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:307)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    ...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'adminService' must be of type [employee.service.impl.AdminServiceImpl], but was actually of type [$Proxy52]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:360)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
Run Code Online (Sandbox Code Playgroud)

我为用户和管理员提供了两个rolle服务:

package employee.service;

import …
Run Code Online (Sandbox Code Playgroud)

java annotations spring-mvc tomcat7

42
推荐指数
9
解决办法
7万
查看次数

在Android Studio中删除OnClick注释的"Method is never used"警告

对不起,如果之前已经问过这个问题.我正在使用Butterknife 5.0和最新版本的Android Studio(0.5.7).如何为使用ButterKnife的'OnClick'注释的方法删除"Method is never used"警告.我注意到Eclipse并没有为'OnClick'方法提供此警告.提前致谢

methods warnings annotations android-studio butterknife

42
推荐指数
4
解决办法
2万
查看次数

Android - 将@IntDef值放在@interface中可以吗?

我正在尝试@IntDef在Android开发中实现注释.

第一种方法:在Constant.java类中分隔定义看起来很棒:

public class Constant {
   @IntDef(value={SORT_PRICE, SORT_TIME, SORT_DURATION})
   @Retention(RetentionPolicy.SOURCE)
   public @interface SortType{}
   public static final int SORT_PRICE = 0;
   public static final int SORT_TIME = 1;
   public static final int SORT_DURATION = 2;
}
Run Code Online (Sandbox Code Playgroud)

用法:

@Constant.SortType int sortType = Constant.SORT_PRICE;
Run Code Online (Sandbox Code Playgroud)

但是当在一个文件中存在多个定义(例如UserType,StoreType等)时,事情会变得更加混乱.

第二种方法:所以我想出了这样的东西来分隔定义之间的值:

public class Constant {
   @IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
   @Retention(RetentionPolicy.SOURCE)
   public @interface SortTypeDef{}

   public static class SortType{
       public static final int PRICE = 0;
       public static final int TIME = 1;
       public static …
Run Code Online (Sandbox Code Playgroud)

java android annotations

42
推荐指数
1
解决办法
3807
查看次数

Hibernate CollectionOfElements EAGER获取重复元素

我有一个名为SynonymMapping的类,它有一组映射为CollectionOfElements的值

@Entity(name = "synonymmapping")
public class SynonymMapping {

    @Id private String keyId;

    //@CollectionOfElements(fetch = FetchType.EAGER)
    @CollectionOfElements
    @JoinTable(name="synonymmappingvalues", joinColumns={@JoinColumn(name="keyId")})
    @Column(name="value", nullable=false)
    @Sort(type=SortType.NATURAL)
    private SortedSet<String> values;

    public SynonymMapping() {
        values = new TreeSet<String>();
    }

    public SynonymMapping(String key, SortedSet<String> values) {
        this();
        this.keyId = key;
        this.values = values;
    }

    public String getKeyId() {
        return keyId;
    }

    public Set<String> getValues() {
        return values;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个测试,我将两个SynonymMapping对象存储到数据库,然后要求数据库返回所有保存的SynonymMapping对象,期望接收我存储的两个对象.

当我将值的映射更改为急切(如注释行中的代码所示)并再次运行测试时,我会收到四个匹配项.

我已经清除了运行之间的数据库,我可以复制这个问题在eager和lazy之间交换.

我认为它与hibernate在下面创建的连接有关但我无法在网上找到明确的答案.

任何人都可以告诉我为什么急切的提取是复制对象?

谢谢.

java annotations hibernate

41
推荐指数
3
解决办法
3万
查看次数

是否可以强制使用Java注释的值?

Java允许在注释中定义值,例如:

public @interface MyAnnotation {
    int MyValue();
}
Run Code Online (Sandbox Code Playgroud)

虽然可以为MyValue注释设置默认值,但我想知道是否可以强制使用它.我的意思是强制用户MyValue在注释类或字段时提供值.

我浏览了文档但找不到任何内容.有没有人能解决这个问题,或者只是不可能强制要求注释的值?

java annotations

41
推荐指数
2
解决办法
2万
查看次数

设置metadata-complete ="true"(解决了Tomcat 7启动缓慢)后如何处理注释?

似乎可以通过在web.xml中将"metadata-complete"设置为"true"来解决缓慢的Tomcat 7启动问题,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"...
Run Code Online (Sandbox Code Playgroud)

问题是Tomcat在启动时扫描注释,这会显着减慢它的速度.我的时间从25秒减少到5秒.(更多信息:Tomcat和Servlet 3.0 Web配置)

但是,我的代码中有一些注释,例如:

@ManagedBean
@RequestScoped
@Override
...
Run Code Online (Sandbox Code Playgroud)

我很困惑 - 在设置metadata-complete ="true"后我的代码会工作吗?我是否必须删除注释并将所有内容移至web.xml中?

annotations servlet-3.0 tomcat7

41
推荐指数
2
解决办法
3万
查看次数

带有java.util.concurrent.locks.ReadWriteLock的@GuardedBy注释

注释受保护的字段的正确/首选方法是什么,ReadWriteLock以便像FindBugs这样的工具可以利用注释?应该ReadWriteLock简单地在@GuardedBy注释中写下名称.是否有理由在@GuardedBy注释中写入只读锁的名称,或只写写锁?不FindBugs的,或其他工具,甚至支持ReadWriteLock@GuardedBy

java concurrency annotations static-analysis findbugs

40
推荐指数
1
解决办法
3万
查看次数