자바 의 매 거 진,주해 와 반사(1)
매 거 는 무엇 입 니까?
매 거 하 다
수학 과 컴퓨터 과학 이론 에서 한 집합 은 빈 서열 집합 이 있 는 모든 구성원 을 열거 하 는 프로그램 이나 특정한 유형의 대상 을 계산 하 는 것 이다.이 두 가지 유형 은 자주 겹 친다.이름 이 붙 은 정형 상수 의 집합 으로 일상생활 에서 흔히 볼 수 있다.예 를 들 어 요일
SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY
이 바로 매 거 진 것 이다.그 다음 에 스 레 드 의 상태:생 성,운행,차단,대기,소멸 등 도 매 거 진 것 입 니 다.자바 에서 의 매 거 진 것 도 비슷 하 다.
매 거 진 것 은 JDK 1.5 이후 에 도 입 된 것 이다.주요 용 도 는 상수 한 조 를 조직 하 는 것 이다.
상수 그룹 을 정의 해 야 할 때 매 거 진 을 사용 할 수 있 습 니 다.매 거 된 대상 은 유한 하고 확정 적 이다.
매 거 자체 가 하나의 유형 이 고 그 구조 방법 은 기본적으로 사유 이다.
매 거 진 대상 이 하나 밖 에 없다 면 단일 모델 의 실현 방식 으로 할 수 있다.
매 거 류 의 실현
사용자 정의 매 거 진 클래스 구현
jdk 1.5 이전에 사용자 정의 방식 으로 매 거 진 클래스 의 정 의 를 실현 합 니 다.
package enumDemo;
/**
* user:ypc;
* date:2021-06-22;
* time: 18:21;
*
*/
public class EnumDemo1 {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
//
class Season {
//1. , private final
private final String seasonName;
private final String seasonDesc;
//2. ,
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3. , 。
public static final Season SPRING = new Season(" ", " ");
public static final Season SUMMER = new Season(" ", " ");
public static final Season AUTUMN = new Season(" ", " ");
public static final Season WINTER = new Season(" ", " ");
//
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
키워드 enum 을 사용 하여 매 거 진 클래스 를 정의 합 니 다.
jdk 1.5 enum 키워드 도입
package enumDemo;
import org.junit.Test;
/**
* user:ypc;
* date:2021-06-22;
* time: 18:40;
* enum
*/
public class EnumDemo2 {
@Test
public void test(){
SeasonEnum spring = SeasonEnum.SPRING;
System.out.println(spring);
//
System.out.println(" :"+SeasonEnum.class.getSuperclass().getName());
}
}
enum SeasonEnum{
// , "," , ";"
SPRING(" "," "),
SUMMER(" "," "),
AUTUMN(" "," "),
WINTER(" "," ");
private final String seasonName;
private final String seasonDesc;
private SeasonEnum(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
Enum 의 상용 방법
package enumDemo;
import org.junit.Test;
/**
* @author ypc
* @create 2021-06-22;
*
*/
public class EnumDemo3 {
@Test
public void test() {
//toString
System.out.println(SeasonEnum.SPRING.toString());
System.out.println("****************************");
//values .
SeasonEnum[] seasonEnums = SeasonEnum.values();
System.out.println(" :");
for (SeasonEnum seasonenum : seasonEnums) {
System.out.println(seasonenum);
}
System.out.println("****************************");
//
Thread.State[] states = Thread.State.values();
System.out.println(" :");
for (int i = 0; i < states.length; i++) {
System.out.println(states[i]);
}
System.out.println("****************************");
//valueOf
SeasonEnum winter = SeasonEnum.valueOf("WINTER");
System.out.println(winter);
}
}
인터페이스의 매 거 진 클래스 를 실현 하 다
인 터 페 이 스 를 실현 하고 매 거 진 유형 에서 추상 적 인 방법 을 실현 한다.
interface info {
void show();
}
enum SeasonEnumImplementsInterface1 implements info {
// , "," , ";"
SPRING(" ", " "),
SUMMER(" ", " "),
AUTUMN(" ", " "),
WINTER(" ", " ");
private final String seasonName;
private final String seasonDesc;
private SeasonEnumImplementsInterface1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
@Override
public void show() {
System.out.println(" ");
}
}
인터페이스의 모든 매 거 대상 이 각자 의 방법 을 실현 하도록 하 다.
//
enum SeasonEnumImplementsInterface2 implements info {
// , "," , ";"
SPRING(" ", " ") {
@Override
public void show() {
System.out.println(" ");
}
},
SUMMER(" ", " ") {
@Override
public void show() {
System.out.println(" ");
}
},
AUTUMN(" ", " ") {
@Override
public void show() {
System.out.println(" ");
}
},
WINTER(" ", " ") {
@Override
public void show() {
System.out.println(" ");
}
};
private final String seasonName;
private final String seasonDesc;
private SeasonEnumImplementsInterface2(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
public class EnumDemo4 {
@Test
public void test1(){
SeasonEnumImplementsInterface1[] SeasonEnumImplementsInterface1s = SeasonEnumImplementsInterface1.values();
System.out.println(" :");
for (SeasonEnumImplementsInterface1 seasonEnumImplementsInterface1:SeasonEnumImplementsInterface1s) {
System.out.println(seasonEnumImplementsInterface1);
seasonEnumImplementsInterface1.show();
}
}
@Test
public void test2(){
SeasonEnumImplementsInterface2[] SeasonEnumImplementsInterface2s = SeasonEnumImplementsInterface2.values();
System.out.println(" :");
for (SeasonEnumImplementsInterface2 seasonEnumImplementsInterface2:SeasonEnumImplementsInterface2s) {
System.out.println(seasonEnumImplementsInterface2);
seasonEnumImplementsInterface2.show();
}
}
}
주해주해 개술
자바 에서 주해
Annotation
는 자바 5 에서 시 작 된 메타 정 보 를 도입 하여 자바 코드 의 메타 정 보 를 묘사 합 니 다.일반적인 상황 에서 주 해 는 코드 의 집행 에 직접적인 영향 을 주지 않 습 니 다.비록 일부 주 해 는 코드 실행 에 영향 을 줄 수 있 지만.A
nnotation
사실은 코드 에 있 는 특수 한 태그 입 니 다.이 표 지 는 컴 파일,클래스 로 딩,실행 시 읽 히 고 해당 하 는 처 리 를 수행 할 수 있 습 니 다.Annotation 을 사용 하면 프로그래머 는 원 논 리 를 바 꾸 지 않 고 원본 파일 에 추가 정 보 를 삽입 할 수 있 습 니 다.Annotation 은 패 킷,클래스,구조 기,방법,구성원 변수,파라미터,부분 변수의 성명 을 수식 하 는 데 사용 할 수 있 으 며 이 정 보 는 Annotation 의'name=value'쌍 에 저 장 됩 니 다.
JavaSE 에서 주해 의 사용 목적 은 비교적 간단 하 다.예 를 들 어 유행 이 지난 기능 을 표시 하고 경 고 를 무시 하 는 등 이다.
어느 정도 프레임=주해+반사 메커니즘+디자인 모델
흔 한 주해
1.문서 에 대한 설명 생 성
2.컴 파일 할 때 포맷 검사
3.코드 의 의존성 을 추적 하여 프로필 을 대체 하 는 기능 을 실현 합 니 다.
package AnnotationDemo;
/**
* 1.
* @author ypc
* @create 2021-06-22;
*/
public class AnnotationDemo1 {
}
class B implements A{
//2.
@Override
public void test() {
}
}
interface A{
void test();
}
/**
* 3. ,
*
<servlet>
<servlet-name>reg</servlet-name>
<servlet-class>service.RegServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>reg</servlet-name>
<url-pattern>/reg</url-pattern>
</servlet-mapping>
:
@WebServlet("/reg")
*/
총결산이 글 의 전반 부 는 여기까지 입 니 다.당신 에 게 도움 이 되 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.