注释默认为“null”值

时间:2014-07-10 16:01:52

标签: java annotations

是否可以指定一个默认为null的注释?

我想要实现的是可选的注释属性。

例如

public @interface Foo {

   Config value();

}


public @interface Config {

   boolean ignoreUnknown() default false;
   int steps() default 2;
}

我想使用@Foo(没有指定值,所以它应该是某种可选的),我也希望能够写出这样的东西:

@Foo (
   @Config(
      ignoreUnknown = true,
      steps = 10
   )
)

是否可以使用注释做这样的事情?

我不想做这样的事情     public @interface Foo {

   boolean ignoreUnknown() default false;
   int steps() default 2;
}

因为我希望能够区分是否已设置属性(而不是是否具有默认值)。

描述起来有点复杂,但我正在研究一个生成Java代码的Annotation Processor。但是在运行时我想设置一个应该用于所有@Foo的默认配置,除了那些使用@Config设置了自己配置的人。

所以我想要的是这样的:

public @interface Foo {

       Config value() default null;

 }

但据我所知,这是不可能的,对吧?有没有人知道这种可选属性的解决方法?

2 个答案:

答案 0 :(得分:23)

不,您无法使用null作为注释属性值。但是,您可以使用数组类型并提供空数组。

public @interface Foo {
    Config[] value();  
}
...
@Foo(value = {})

public @interface Foo {
    Config[] value() default {};  
}
...
@Foo

答案 1 :(得分:0)

尝试:


import pandas as pd 

import requests
import json

url = 'http://api.geonames.org/searchJSON?'

df = pd.read_excel('Book.xlsx', sheet_name='Sheet1', usecols="B")

for item in df.place_name:

    df.place_name.head()

    params ={   'username': "XXXXXX",

                'name_equals': item,

                'maxRows': "1"}

    e = requests.get(url, params=params)

    pretty_json = json.loads(e.content)

    for item in pretty_json["geonames"]:

        print (json.dumps(item["geonameId"], indent=2))

        with open('data.json', 'w', encoding='utf-8') as f:

            json.dump(item["geonameId"], f, ensure_ascii=False, indent=4)       

    #print(e.content)