자바 주석 간단 설명 및 응용
jdk 자체 주해:
@Override 부모 클래스 덮어 쓰기 방법
@Override
public String name() {
return null;
}
부모 클래스 의 방법 정의 에 문제 가 있 는 것 을 발견 하면 삭제 할 수 없습니다. 아직 있 는 곳 이 있 기 때 문 입 니 다.
이 인 터 페 이 스 를 호출 하면:
@Deprecated 지 났 다
부모 클래스 의 설정 방법 이 시간 이 지 났 습 니 다:
@Deprecated
public void sing();
@Suppvisewarnings 방법 이 시대 에 뒤떨어 진 경 고 를 무시 하 다.
테스트 클래스 가 호출 될 때 방법 이 시대 에 뒤떨어 진 경고 가 나타 납 니 다. 느낌표 를 누 르 면 무시 시간 이 지 났 습 니 다.
@SuppressWarnings("deprecation")
public void sing(){
Person p = new child();
p.sing();
}
2. 흔히 볼 수 있 는 제3자 주해:
Spring :
@Autowired
@Service
@Repository
Mybatis :
@InterProvider
@UpdateProvider
@Options
3. 주해 의 분류:
-->소스 코드 주석
주 해 는 원본 코드 에 만 존재 합 니 다. class 파일 로 컴 파일 하면 없습니다.
-->컴 파일 시 주석
주 해 는 원본 코드 와 class 파일 에 존재 합 니 다.
예 를 들 어 @ Override 는 컴 파일 러 에 부모 클래스 를 덮어 쓰 는 방법 을 알려 주 고 컴 파일 합 니 다.
-->런 타임 설명
주 해 는 운행 단계 에서 도 작용 하여 운행 논리 에 영향 을 미친다.
예 를 들 어 @ Autowired 가 실 행 될 때 구성원 변 수 를 설치 합 니 다.
원 주해: 주해 에 대한 주해
4. 사용자 정의 설명:
설명:
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description{// @interface
String desc();//
String author();
int age() default 18;// default
}
원 주석:
// ( 、 、 、 )
@Target({ElementType.METHOD,ElementType.TYPE})
// ( 、 、 )
@Retention(RetentionPolicy.RUNTIME)
//
@Inherited
// javadoc
@Documented
사용자 정의 설명 사용 하기:
@Description(desc="zy",author="boy",age=18)
public String eyeColor(){
return "red";
}
이렇게, @ Description 주 해 는 eyeColor () 방법 에서 사용 합 니 다.5. 해석 설명:
클래스, 함수 또는 구성원 의 실행 시 주석 정 보 를 반사 적 으로 가 져 와 동적 제어 프로그램
실행 논리.
//1、
try {
Class c = Class.forName
("com.ann.test.child");
//2、 (
Description )
boolean isExist = c.isAnnotationPresent
(Description.class);
if(isExist){
//3、
Description d = (Description)
c.getAnnotation(Description.class);
System.out.println(d.value());
}
//4、
//
Method[] ms = c.getMethods();
for (Method m : ms) {
//
boolean isMExist =
m.isAnnotationPresent(Description.class);
if (isMExist) {
//
Description md =
(Description)m.getAnnotation(Description.class);
System.out.println
(md.value());
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
주해 의 계승:
부모 클래스 에 주 해 를 추가 하고, 하위 클래스 에 있 는 주 해 를 삭제 합 니 다.
이때 도 위의 해석 방식 으로 하위 클래스 에 대해 주석 해석 을 한다.
이 때 아무것도 출력 하지 않 고 실행 원인 은: @Inherited 는 인터페이스 계승 에 도움 이 되 지 않 습 니 다.
그래서 Person 을 인터페이스 가 아니 라 클래스 로 바 꿔 야 합 니 다.
child 클래스 에서 extends 로 변경
실행 -- > 방법 에 대한 주 해 를 인쇄 하지 않 고 클래스 의 주 해 를 출력 합 니 다.
그래서 주 해 는 유형 상의 주해 만 계승 하고 방법 상의 주 해 는 계승 하지 않 는 다.
6. 프로젝트 실현:
수요: 대상 이 조회 할 조건 을 설정 하고 query () 를 호출 한 후 대응 하 는 sql 문 구 를 되 돌려 줍 니 다.
Filter. java 클래스: (데이터베이스 테이블 의 각 필드 에 대응)
package com.zy.test;
@Table("user")
public class Filter {
@Column("id")
private int id;
@Column("user_name")
private String userName;
@Column("nick_name")
private String nickName;
@Column("age")
private int age;
@Column("city")
private String city;
@Column("email")
private String email;
@Column("mobile")
private String mobile;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickNameString) {
this.nickName = nickNameString;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
Test 구현 클래스: (검색 조건 을 설정 하고 query 를 sql 로 되 돌려 줍 니 다)
package com.zy.test;
public class Test {
public static void main(String[] args) {
Filter f1 = new Filter();
f1.setId(10);// id 10
Filter f2 = new Filter();
f2.setUserName("lucy");// lucy
Filter f3 = new Filter();
f3.setEmail
("[email protected],[email protected],[email protected]");//
// query
String sql1 = query(f1);
String sql2 = query(f2);
String sql3 = query(f3);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
}
private static String query(Filter f){
return null;
}
}
Filter 클래스 에 @ Table 과 @ Column 두 개의 주 해 를 추가 한 후 이 두 개의 주 해 를 추가 합 니 다.
정의 하기: (여기 서 주 해 를 정의 하여 대상 을 데이터베이스 에 있 는 표 와 대응 합 니 다)
Table. java: (매개 변 수 를 표 이름 으로 설정 하고 역할 영역 을 클래스 나 인터페이스 로 설정 합 니 다)
Column. java: (매개 변 수 를 열 이름 으로 설정 하고 역할 영역 을 매개 변수 로 설정 합 니 다)
package com.zy.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String value();
}
package com.zy.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String value();
}
Test. java 에서 query () 방법의 실현: (이 필드 값 은 String 과 int 형식 이 있 으 므 로 Object 형식 으로 정의 해 야 합 니 다)
package com.zy.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
Filter f1 = new Filter();
f1.setId(10);// id 10
Filter f2 = new Filter();
f2.setUserName("lucy");// lucy
f2.setAge(19);
Filter f3 = new Filter();
f3.setEmail
("[email protected],[email protected],[email protected]");//
// query
String sql1 = query(f1);
String sql2 = query(f2);
String sql3 = query(f3);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
}
private static String query(Filter f){
StringBuilder sb = new StringBuilder();
//1、 class
Class c = f.getClass();
//2. table
boolean exists = c.isAnnotationPresent
(Table.class);
if (!exists) {
return null;
}
Table t = (Table)c.getAnnotation(Table.class);
String tableName = t.value();
sb.append("select * from ").append
(tableName).append(" where 1=1 ");
//
Field[] fArray = c.getDeclaredFields();
for (Field field : fArray) {
//4. sql
//4.1
boolean fExists = field.isAnnotationPresent
(Column.class);
if (!fExists) {//
continue;
}
Column column = (Column)field.getAnnotation
(Column.class);
String columnNameString = column.value();
//4.2 ( get ,
, )
String filedName = field.getName();
// get
filedName.substring(0, 1).toUpperCase(),
filedName.substring(1), get
String getMethodName = "get" +
filedName.substring(0, 1).toUpperCase() + filedName.substring(1);
//
Object fieldValue = null;
try {
Method getMethod = c.getMethod
(getMethodName);
//
fieldValue = getMethod.invoke(f);
} catch (Exception e) {
e.printStackTrace();
}
// sql
// int 0
fieldValue instanceof Integer && (Integer)fieldValue == 0,
if (fieldValue == null || (fieldValue instanceof
Integer && (Integer)fieldValue == 0)) {
continue;
}
sb.append("and ").append(filedName);
if (fieldValue instanceof String) {
// ,
if (((String) fieldValue).contains(","))
{
String[] value =
((String) fieldValue).split(",");
sb.append("in(");
for (String v : value) {
sb.append
("'").append(v).append("'").append(",");
}
//
sb.deleteCharAt
(sb.length()-1);
sb.append(")");
}else{
sb.append("=").append
("'").append(fieldValue).append("'");
}
}
else if (fieldValue instanceof Integer) {
sb.append("=").append
(fieldValue);
}
}
return sb.toString();
}
}
현재 두 번 째 표 (Department. 자바) 가 있다 면 sql 생 성 을 위 한 방법 도 필요 합 니 다.
해당 대상 에 @ Table 과 @ Column 주석 만 추가 하면 됩 니 다.
Department.java:
package com.zy.test;
@Table("department")
public class Department {
@Column("id")
private int id;
@Column("name")
private String name;
@Column("leader")
private String leader;
@Column("number")
private int number;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLeader() {
return leader;
}
public void setLeader(String leader) {
this.leader = leader;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
query () 방법 에서 매개 변 수 를 Object 로 바 꾸 면 모든 대상 이 주 해 를 추가 하 는 데 효과 가 있 습 니 다.
Department d = new Department();
d.setId(1);
d.setLeader("kkk");
d.setNumber(111);
System.out.println(query(d));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.