java注解大全_java开发注解大全
1、最基礎(chǔ)注解(spring-context包下的org.springframework.stereotype)
1.1、@Controller @Service @Repository @Configuration @Component
(1)解釋
用于標(biāo)注各個(gè)層級(jí)的注解,注入到spring容器管理
@Controller @Service @Repository @Configuration 都是@Component組合注解只是區(qū)分層級(jí)關(guān)系
注解
層級(jí)
@Controller
標(biāo)注于控制層
@Service
標(biāo)注于業(yè)務(wù)層
@Repository
標(biāo)注于dao持久層
@Configuration
標(biāo)注于配置層
@Component
泛指組件,當(dāng)組件不好歸類時(shí)可用
(2)示例
@Controller
public class UserController {
}
1.2、 @Bean
(1)解釋
@Bean等價(jià)于< Bean >< /Bean >,添加的bean的id為方法名。
(2)例子
@Configuration
public class AppConfig {
//@bean 也可以依賴其他任意數(shù)量的bean,如果TransferService 依賴 AccountRepository,我們可以通過方法參數(shù)實(shí)現(xiàn)這個(gè)依賴
@Bean
public TransferService transferService(AccountRepository accountRepository) {
return new TransferServiceImpl(accountRepository);
}
}
這個(gè)配置就等同于之前在xml里的配置:
@Configuration可理解為用spring的時(shí)候xml里面的< beans >標(biāo)簽
@Bean可理解為用spring的時(shí)候xml里面的< bean >標(biāo)簽
2、最基礎(chǔ)注解(spring-web包下的org.springframework.web.bind.annotation)
2.1、@ResponseBody
(1)解釋
該方法的返回的結(jié)果直接寫入 HTTP 響應(yīng)正文(ResponseBody)中。
一般在異步獲取數(shù)據(jù)時(shí)使用,通常是在使用 @RequestMapping 后,返回值通常解析為跳轉(zhuǎn)路徑,加上 @Responsebody 后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫入HTTP 響應(yīng)正文中。
(2)例子
/***********************例子一*******************************/
@RequestMapping(value="user/login")
@ResponseBody
//將ajax(datas)發(fā)出的請(qǐng)求寫入U(xiǎn)ser對(duì)象中,返回json對(duì)象響應(yīng)回去
public User login(User user) {
User user = new User();
user.setUserid(1);
user.setUsername("MrF");
user.setStatus("1");
return user ;
}
/***********************例子二*******************************/
@Controller
public class UserController {
@GetMapping("/hello")
@ResponseBody public String hello() {
return "hello spring";
}
}
2.2、@RequestBody
(1)解釋
將 HTTP 請(qǐng)求正文插入方法中,使用適合的 HttpMessageConverter 將請(qǐng)求體寫入某個(gè)對(duì)象。換句話就是:用于接收前端請(qǐng)求的Json參數(shù),并且封裝到對(duì)應(yīng)的JavaBean
(2)例子
@RequestMapping(value = "user/login")
@ResponseBody
// 將ajax(datas)發(fā)出的請(qǐng)求寫入U(xiǎn)ser對(duì)象中
public User login(@RequestBody User user) {
// 這樣就不會(huì)再被解析為跳轉(zhuǎn)路徑,而是直接將user對(duì)象寫入 HTTP 響應(yīng)正文中
return user;
}
(3)使用時(shí)機(jī)
A) GET、POST方式提時(shí), 根據(jù)request header Content-Type的值來判斷:
application/x-www-form-urlencoded,可選(即非必須,因?yàn)檫@種情況的數(shù)據(jù)@RequestParam,@ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理);
multipart/form-data,不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù));
其他格式,必須(其他格式包括application/json,application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理);
B) PUT方式提交時(shí), 根據(jù)request header Content-Type的值來判斷:
application/x-www-form-urlencoded,必須;multipart/form-data,不能處理;其他格式,必須;
2.3、@RequestMapping
(1)解釋
用來處理請(qǐng)求地址映射的注解
(2)例子
/**
* 用于類上,可以沒有
*/
@RequestMapping(value = "/controllerDemo")
public class ControllerDemo {
// 用于方法上,必須有
@RequestMapping(value = "/methodDemo")
public String methodDemo() {
return "helloWorld";
}
}
(3)注解參數(shù)
RequestMapping注解有六個(gè)屬性,下面我們把她分成三類進(jìn)行說明。
1、value, method
value: 指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template 模式(后面將會(huì)說明)
method:指定請(qǐng)求的method類型,GET、POST、PUT、DELETE等
2、consumes,produces
consumes: 指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
produces: 指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才返回;
3、params,headers
params:指定request中必須包含某些參數(shù)值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求。
2.4、@PostMapping
(1)解釋
一個(gè)組合注解,是@RequestMapping(method = RequestMethod.POST)的縮寫。
(2)例子
@PostMapping("/pay")
public JsonResponse pay(HttpServletRequest request){}
2.5、@GetMapping
(1)解釋
一個(gè)組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫。
(2)例子
@GetMapping("/getAll/{companyName}")
public ReturnModel getAllBusByCompany(@PathVariable(value="companyName",required=false)String companyName){}
2.6、@PathVariable
(1)解釋
用于接受前端url路徑參數(shù),通過路徑參數(shù)作為接口接受的參數(shù),Result風(fēng)格
區(qū)分:
使用@RequestParam時(shí),URL是這樣的:http://host:port/path?參數(shù)名=參數(shù)值
使用@PathVariable時(shí),URL是這樣的:http://host:port/path/參數(shù)值
(2)例子
訪問路徑:localhost:8080/hello/1
@GetMapping("/hello/{id}")
public String func(@PathVariable String id) {
return id;
}
(3)參數(shù)
返回值
參數(shù)
作用
String
value
name別名
String
name
url參數(shù)的綁定值
2.7、@RequestParam
(1)解釋
用于接受前端提交的參數(shù)
(2)參數(shù)
返回值
參數(shù)
作用
String
value
name別名
String
name
請(qǐng)求參數(shù)對(duì)應(yīng)的屬性
boolean
required
是否必傳
Stirng
defaultValue
默認(rèn)值
(2)例子
訪問方式:localhost:8080/hello?name=張三
@GetMapping("/hello")
public String func(@RequestParam(name = "name", required = false, defaultValue = "張三") String name) {
return "OK";
}
2.8、@RestController
(1)解釋
相當(dāng)于@ResponseBody + @Controller,Controller中的方法無法返回jsp頁面,
返回的內(nèi)容就是Return 里的內(nèi)容。
3、persistence注解(javax.persistence包下的javax.persistence)
3.1、@Entity,@Table,@Id,@GeneratedValue, @Column,@Temporal,@Generated
(1)解釋
@Entity表明該類是實(shí)體類,并且使用默認(rèn)的orm規(guī)則,即class名即數(shù)據(jù)庫表中表名,class字段名即表中的字段名。如果class名和數(shù)據(jù)庫表中名字不一致就用@Table,如果class字段名和表中的字段名不一直就用@Column
@Column用來標(biāo)識(shí)實(shí)體類中屬性與數(shù)據(jù)表中字段的對(duì)應(yīng)關(guān)系
name定義了被標(biāo)注字段在數(shù)據(jù)庫表中所對(duì)應(yīng)字段的名稱;
unique表示該字段是否為唯一標(biāo)識(shí),默認(rèn)為false。如果表中有一個(gè)字段需要唯一標(biāo)識(shí),則既可以使用該標(biāo)記,也可以使用@Table標(biāo)記中的@UniqueConstraint。
nullable表示該字段是否可以為null值,默認(rèn)為true。
insertable表示在使用“INSERT”腳本插入數(shù)據(jù)時(shí),是否需要插入該字段的值。
updatable表示在使用“UPDATE”腳本插入數(shù)據(jù)時(shí),是否需要更新該字段的值。insertable和updatable屬性一般多用于只讀的屬性,例如主鍵和外鍵等。這些字段的值通常是自動(dòng)生成的。
columnDefinition表示創(chuàng)建表時(shí),該字段創(chuàng)建的SQL語句,一般用于通過Entity生成表定義時(shí)使用。(也就是說,如果DB中表已經(jīng)建好,該屬性沒有必要使用。)
table表示當(dāng)映射多個(gè)表時(shí),指定表的表中的字段。默認(rèn)值為主表的表名。
length表示字段的長度,當(dāng)字段的類型為varchar時(shí),該屬性才有效,默認(rèn)為255個(gè)字符。
precision和scaleprecision屬性和scale屬性表示精度,當(dāng)字段類型為double時(shí),precision表示數(shù)值的總長度,scale表示小數(shù)點(diǎn)所占的位數(shù)。
@Id表名該字段是主鍵,如果要開啟自增主鍵就用@GeneratedValue
@Temporal幫Java的Date類型進(jìn)行格式化,一共有三種注解值
第一種:@Temporal(TemporalType.DATE)——>實(shí)體類會(huì)封裝成日期“yyyy-MM-dd”的 Date類型。
第二種:@Temporal(TemporalType.TIME)——>實(shí)體類會(huì)封裝成時(shí)間“hh-MM-ss”的 Date類型。
第三種:@Temporal(TemporalType.TIMESTAMP)——>實(shí)體類會(huì)封裝成完整的時(shí)間“yyyy-MM-dd hh:MM:ss”的 Date類型。
@Generated自動(dòng)生成
generated= never 標(biāo)明此屬性值不是從數(shù)據(jù)庫中生成。
generated默認(rèn)值是never。
generated= insert 標(biāo)明此屬性值在insert的時(shí)候生成,但是不會(huì)在隨后的update時(shí)重新生成。
generated= always 標(biāo)明此屬性值在insert和update時(shí)都會(huì)被生成
(2)例子
import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "batch")
public class Batch{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
//在插入的時(shí)候自動(dòng)賦值當(dāng)前時(shí)間
@Column(insertable = false)
@Temporal(TemporalType.TIMESTAMP)
@Generated(GenerationTime.INSERT)
private Date createdTime;
//自動(dòng)變化更新時(shí)間
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable = false, updatable = false)
@Generated(GenerationTime.ALWAYS)
private Date updatedTime;
//在插入的時(shí)候自動(dòng)賦值1
@Column(insertable = false ,columnDefinition="Short default 1")
@Generated(GenerationTime.INSERT)
private Short status;
4、resteasy注解(jaxrs-api包下的javax.ws.rs)
resteasy 是java體系中比較成熟的rest框架,也是jax-rs規(guī)范的實(shí)現(xiàn)之一,dubbox的REST服務(wù)框架,就是采用的resteasy實(shí)現(xiàn)。
默認(rèn)情況下,resteasy使用jackson和jaxb來實(shí)現(xiàn)json及xml格式的序列化。應(yīng)用啟動(dòng)時(shí),會(huì)自動(dòng)掃描帶@Provider的包,找到最合適的provider。
這個(gè)可以用來做分布式,可以通過okhttp3協(xié)議來進(jìn)行交互
4.1、@Path、@POST、@Produces、@Consumes、@Context
(1)例子
import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;
import com.tdpay.dubbo.common.response.JsonResponse;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
@Path("/td")
public interface PayIntegrationService {
@Path("/pay")
@POST
@Produces({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
@Consumes({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
public JsonResponse pay(@Context HttpServletRequest request);
}
5、validation注解(validation-api包下的javax.validation)
5.1、@Valid 和 @屬性校驗(yàn)注解
(1)解釋
用于前端請(qǐng)求參數(shù)校驗(yàn),@Valid需要配合BindingResult使用,以及配合下面各種校驗(yàn)注解進(jìn)行使用
(2)注解參數(shù)
注解
作用
@Valid
進(jìn)行校驗(yàn)前端入?yún)?/p>
注解
作用
@Null
限制只能為null
@NotNull
限制必須不為null
@AssertFalse
限制必須為false
@AssertTrue
限制必須為true
@DecimalMax(value)
限制必須為一個(gè)不大于指定值的數(shù)字
@DecimalMin(value)
限制必須為一個(gè)不小于指定值的數(shù)字
@Digits(integer,fraction)
限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
@Future
限制必須是一個(gè)將來的日期
@Max(value)
限制必須為一個(gè)不大于指定值的數(shù)字
@Min(value)
限制必須為一個(gè)不小于指定值的數(shù)字
@Past
限制必須是一個(gè)過去的日期
@Pattern(value)
限制必須符合指定的正則表達(dá)式
@Size(max,min)
限制字符長度必須在min到max之間
@Past
驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
@NotEmpty
驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@NotBlank
驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式
(3)示例
/**
* 接受前端的請(qǐng)求并且根據(jù)User實(shí)體類注解進(jìn)行校驗(yàn)
*/
@PostMapping("/hello/user")
public String hello(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
result.getAllErrors().forEach(System.out::println);
}
System.out.println(user);
return "hello spring";
}
@Data
public class User {
@NotBlank(message = "用戶名不能為空")
private String username;
@NotBlank(message = "密碼名不能為空")
private String password;
}
6、lombok常用注解
idea要下載lombok插件
打開IDEA的Setting –> 選擇Plugins選項(xiàng) –> 選擇Browse repositories –> 搜索lombok –> 點(diǎn)擊安裝 –> 安裝完成重啟IDEA –> 安裝成功
然后pom導(dǎo)入lombok包
org.projectlombok
lombok
1.18.0
provided
6.1、@Slf4j和@Log
(1)解釋
@Slf4j: 注解在類上,為類提供一個(gè)屬性名為 log 的 log4j 的日志對(duì)象,避免重復(fù)代碼。(基于lombok包)
@Log:使用的是 java.util.logging.Logger ,直接使用變量 log,用法同上。
(2)示例
@Service
@Slf4j
public class UserService {
public void func() {
log.info("【使用{}】","@Slf4j");
}
}
6.2、@Data
(1)解釋
用在pojo類,在類上面加這個(gè)注解。簡化java代碼編寫,為該類提供讀寫屬性,還提供了equals(),hashCode(),toString()方法。
等價(jià)于 @ToString、@Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor
注意:同時(shí)使用@Data 和 @AllArgsConstructor 后 ,默認(rèn)的無參構(gòu)造函數(shù)失效,如果需要它,要重新設(shè)置 @NoArgsConstructor
(2)例子
@Data
public class ActivityListParam{
private Integer id;
private Integer page;
private Integer count;
...
}
6.3、@Getter,@Setter,@ToString,@EqualsAndHashCode
(1)解釋
在pojo類上面加了這些注解以后,自動(dòng)生成get、set、toString、equals、hashCode等方法
@EqualsAndHashCode(callSuper = false)的意思是忽略父類的字段,來調(diào)用equals和hashcode
6.4、@AllArgsConstructor、@NoArgsConstructor
(1)解釋
@AllArgsConstructor
在pojo類上面加了這些注解以后,會(huì)生成一個(gè)包含所有變量的構(gòu)造函數(shù),同時(shí)如果變量使用了NotNull annotation , 會(huì)進(jìn)行是否為空的校驗(yàn),
全部參數(shù)的構(gòu)造函數(shù)的自動(dòng)生成,該注解的作用域也是只有在實(shí)體類上,參數(shù)的順序與屬性定義的順序一致
@NoArgsConstructor
在pojo類上面加了這些注解以后,會(huì)生成一個(gè)無參構(gòu)造函數(shù)
6.5、@NonNull
(1)解釋
該注解用在屬性或構(gòu)造器上,Lombok會(huì)生成一個(gè)非空的聲明,可用于校驗(yàn)參數(shù),能幫助避免空指針。
(2)例子
public class Person {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
@NonNull
public List getMembers() {
return members;
}
}
6.6、@Cleanup
(1)解釋
該注解能幫助我們自動(dòng)調(diào)用close()方法,很大的簡化了代碼。
(2)例子
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
如不使用Lombok,則需如下:
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}
}
}
6.7、@Builder
(1)解釋
聲明實(shí)體,表示可以進(jìn)行Builder方式初始化
(2)例子
/**
* toBuilder 允許修改屬性
*/
@Builder(toBuilder = true)
@Getter
public class User {
private String name;
private String password;
}
@Test
public void contextLoads() {
// 創(chuàng)建對(duì)象并且賦值
User user = User.builder().name("123").password("456").build();
// 修改對(duì)象屬性值
User updateUser = user.toBuilder().name("張三").password("123").build();
}
7、tkMapper注解
7.1、@Select、@Param
@Param作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對(duì)應(yīng),一般在2=
@Select作用是用注解方式來查詢,不需要通過mapperxml文件
import com.td.pay.tdpay.entity.PayParamsModel;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface PayParamsDao extends Mapper {
/**
* 根據(jù)sn查詢訂單
*/
@Select("SELECT * FROM pay_params WHERE sn = #{sn};")
public PayParamsModel selectBySn(@Param("sn") String srcOrderSn);
}
8、springboot常用注解
8.1、@ConfigurationProperties
(1)解釋
將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中
(2)例子
**
* @ConfigurationProperties:
* prefix = "person":配置文件下面的所有屬性和類的屬性進(jìn)行一一映射
*
* 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map maps;
private List lists;
private Dog dog;
配置文件
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 12
我們可以導(dǎo)入配置文件處理器,以后編寫配置就有提示了
org.springframework.boot
spring-boot-configuration-processor
true
8.2、@MapperScan("com.test.dao")
掃描dao接口,放啟動(dòng)類上面
8.3、@SpringBootApplication(scanBasePackages = {"com.test"})
SpringBootApplication啟動(dòng)時(shí)會(huì)默認(rèn)掃描主類當(dāng)前包及子包,如果需要掃描主類當(dāng)前包外的其他包就用@SpringBootApplication
9、注入bean的三個(gè)注解
歸納:
@Autowired是spring自帶的,@Inject是JSR330規(guī)范實(shí)現(xiàn)的,@Resource是JSR250規(guī)范實(shí)現(xiàn)的,需要導(dǎo)入不同的包
@Autowired、@Inject用法基本一樣,不同的是@Autowired有一個(gè)request屬性
@Autowired、@Inject是默認(rèn)按照類型匹配的,@Resource是按照名稱匹配的
@Autowired如果需要按照名稱匹配需要和@Qualifier一起使用,@Inject和@Name一起使用
9.1、@Inject(javax.inject下的)
(1)解釋
根據(jù)類型進(jìn)行自動(dòng)裝配的,默認(rèn)需要配置與變量名一致。如果需要按名稱進(jìn)行裝配,則需要配合@Named;
@Inject可以作用在變量、setter方法、構(gòu)造函數(shù)上。
(2)例子
@Inject
private Mongo mongo;
9.2、@Autowired ( org.springframework下的sping-beans)
(1)解釋
根據(jù)類型進(jìn)行自動(dòng)裝配的,名稱不一樣也沒事,如果需要按名稱進(jìn)行裝配,則需要配合@Qualifier;
@Autowired有個(gè)屬性為required,可以配置為false,如果配置為false之后,當(dāng)沒有找到相應(yīng)bean的時(shí)候,系統(tǒng)不會(huì)拋錯(cuò);
@Autowired可以作用在變量、setter方法、構(gòu)造函數(shù)上。
(2)例子
@Autowired
private MongoTemplate mongoTemplate;
9.3、 @Resource (jdk下的rt.jar下的javax.annotation)
(1)解釋
根據(jù)名稱進(jìn)行自動(dòng)裝配的,默認(rèn)需要配置與變量名一致,一般會(huì)指定一個(gè)name屬性。
@Resource可以作用在變量、setter方法上。
(2)例子
@Resource(name = "userMapper")
private UserMapper userMapper;
10、java內(nèi)置注解(java.lang下的)
10.1、@Override
(1)解釋
幫助自己檢查是否正確的復(fù)寫了父類中已有的方法
告訴讀代碼的人,這是一個(gè)復(fù)寫的方法
(2)例子
public class Apple extends Fruit{
@Override
public void show_name(int num){
System.out.println("Apple");
}
}
10.2、@Deprecated
(1)解釋
這個(gè)方法或類不再建議使用。調(diào)用時(shí)也會(huì)出現(xiàn)刪除線,但并不代表不能用。在新版本中有其他方法或類可以代替這個(gè)使用,以后的版本也不會(huì)再更新這個(gè)方法或類
(2)例子
/**
* 請(qǐng)改用每個(gè)實(shí)體對(duì)象的實(shí)例方法的existed()方法。
*/
@Deprecated
public static boolean exists(Class clazz, Serializable id) {
return getRepository().exists(clazz, id);
}
10.3、@SuppressWarnings
(1)解釋
抑制內(nèi)容警告,我們使用是要保證抑制影響的范圍最小。
@ SuppressWarnings可以使用的屬性列表如下:
屬性
備注
all
禁止所有警告
boxing
禁止與裝箱/拆箱操作相關(guān)的警告
cast
強(qiáng)制轉(zhuǎn)換以抑制與強(qiáng)制轉(zhuǎn)換操作相關(guān)的警告
dep-ann
用于抑制相對(duì)于已棄用注釋的警告
deprecation
棄用以抑制相對(duì)于棄用的警告
fallthrough
在switch語句中,通過fallthrough來抑制與丟失中斷相關(guān)的警告
finally
最后抑制與最終塊相關(guān)的不返回的警告
hiding
隱藏以抑制相對(duì)于隱藏變量的本地警告
incomplete-switch
在switch語句(enum案例)中,incomplete-switch用來抑制相對(duì)于丟失條目的警告
javadoc
禁止與javadoc警告相關(guān)的警告
nls
使用nls來抑制相對(duì)于非nls字符串的警告。
null
空值來抑制相對(duì)于空值分析的警告
rawtypes
拒絕與使用原始類型相關(guān)的警告
resource
用于抑制與使用類型為Closeable的資源相關(guān)的警告的資源
restriction
限制禁止與使用不鼓勵(lì)或禁止引用相關(guān)的警告
serial
串行用于抑制相對(duì)于可串行化類缺少serialVersionUID字段的警告
static-access
靜態(tài)訪問,抑制相對(duì)于不正確的靜態(tài)訪問的警告
static-method
靜態(tài)方法,用于抑制相對(duì)于可以聲明為靜態(tài)的方法的警告
super
超級(jí)-來抑制相對(duì)于在沒有超級(jí)調(diào)用的情況下重寫方法的警告
synthetic-access
用于抑制相對(duì)于內(nèi)部類的未優(yōu)化訪問的警告的合成訪問
sync-override
在覆蓋同步方法時(shí),由于缺少同步而取消警告
unchecked
未選中以抑制與未選中操作相關(guān)的警告
unqualified-field-access
不限定字段訪問來抑制與字段訪問不限定相關(guān)的警告
unused
不常用來抑制與未使用代碼和死代碼相關(guān)的警告
(2)例子
public class SuppressWarnings {
/**
* 變量單個(gè)類型的警告
*/
@java.lang.SuppressWarnings("unused")
public void unused() {
String s = "";
}
/**
* 抑制多個(gè)類型的警告
* @param item 元素
*/
@java.lang.SuppressWarnings({"unchecked", "rawtypes"})
public void addItems(String item){
List items = new ArrayList();
items.add(item);
}
/**
* 抑制所有類型的警告
* @param item
*/
@java.lang.SuppressWarnings("all")
public void all(String item) {
List items = new ArrayList();
items.add(item);
}
}
10.4、@SafeVarargs
(1)解釋
抑制堆污染警告
問:什么時(shí)候會(huì)出現(xiàn)對(duì)堆污染警告?
答:使用泛型+可變參數(shù)的時(shí)候就會(huì)出現(xiàn)堆污染警告。
(2)例子
@SafeVarargs
public static T useVarargs(T... args){
return args.length > 0?args[0]:null;
}
@Test
public void testSafeVarargs(){
System.out.println(useVarargs(Arrays.asList("s1","s2")));
}
10.5、@FunctionalInterface
(1)解釋
在Java SE 8中引入的 ,申明某個(gè)接口是函數(shù)式接口(函數(shù)式接口是就只含有一個(gè)抽象方法的接口)。加上該注解,當(dāng)你寫的接口不符合函數(shù)式接口定義的時(shí)候,編譯器會(huì)報(bào)錯(cuò)。該注解只是提醒編譯器去檢查該接口是否僅包含一個(gè)抽象方法。
(2)例子
如定義了一個(gè)函數(shù)式接口如下:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}
那么就可以使用Lambda表達(dá)式來表示該接口的一個(gè)實(shí)現(xiàn)(注:JAVA 8 之前一般是用匿名類實(shí)現(xiàn)的):
GreetingService greetService1 = message -> System.out.println("Hello " + message);
總結(jié)
以上是生活随笔為你收集整理的java注解大全_java开发注解大全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树和二叉树的转换代码python_pyt
- 下一篇: java 操作 ldap_JAVA操作L