Java의 열거와 범주를 자세히 설명합니다.
하나: 우선 매거부터 말하자면
열거 유형은 JDK5.0의 새로운 피쳐입니다.Sun은 열거 클래스를 정의하기 위해 새로운 키워드 enum을 도입했다.다음은 일반적인 매거 유형의 정의입니다.
public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}
분명히,enum은 특수한class와 비슷하지만, 실제로enum가 정의한 유형은 하나의 종류이다.이러한 클래스는 라이브러리의 Enum 클래스의 하위 클래스(Java.lang.Enum)입니다.그것들은 이 Enum의 많은 유용한 방법을 계승했다.우리는 코드를 컴파일한 후에 컴파일러가enum 형식을 바이트 파일로 단독으로 컴파일한 것을 발견했다: Color.class.Color 바이트 코드
final enum hr.test.Color {
//
public static final enum hr.test.Color RED;
public static final enum hr.test.Color BLUE;
public static final enum hr.test.Color BLACK;
public static final enum hr.test.Color YELLOW;
public static final enum hr.test.Color GREEN;
private static final synthetic hr.test.Color[] ENUM$VALUES;
}
다음은 엔움이 정의한 매거류의 특징과 용법을 상세하게 소개한다.(뒤에 Color 예제)1. Color 매거류는class이고 계승될 수 없는final류입니다.열거 값(RED, BLUE...)모두 Color 유형의 클래스 정적 상수입니다. 우리는 다음과 같은 방식으로 Color 매거진 클래스의 실례를 얻을 수 있습니다.
Color c=Color.RED;
주의: 이 매거값들은 모두publicstaticfinal의, 즉 우리가 자주 정의하는 상량 방식이기 때문에 매거류의 매거값은 모두 대문자로 하는 것이 가장 좋다.2. 즉, 매거류는class이고 당연히 매거 유형에 구조기, 방법과 데이터 영역이 있다.그러나 매거류의 구조기는 크게 다르다.
(1) 구조기는 매거값을 구성할 때만 호출된다.
enum Color{
RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
// , RED(255,0,0)
private Color(int rv,int gv,int bv){
this.redValue=rv;
this.greenValue=gv;
this.blueValue=bv;
}
public String toString(){ // Enum toString()
return super.toString()+“(”+redValue+“,”+greenValue+“,”+blueValue+“)”;
}
private int redValue; // ,private 。
private int greenValue;
private int blueValue;
}
(2) 구조기는 개인적인private만 가능하며public 구조기는 절대 허용되지 않습니다.이렇게 하면 외부 코드가 매거류의 실례를 새로 구성할 수 없다는 것을 보장할 수 있다.이것도 완전히 이치에 부합된다. 왜냐하면 우리는 매거값이publicstaticfinal의 상량이라는 것을 알고 있기 때문이다.그러나 매거류의 방법과 데이터 영역은 외부 접근을 허용할 수 있다.
public static void main(String args[])
{
// Color colors=new Color(100,200,300); //wrong
Color color=Color.RED;
System.out.println(color); // toString()
}
3. 모든 열거류는 Enum의 방법을 계승하고 있습니다. 다음은 이 방법들을 상세하게 소개합니다.(1)ordinal () 방법: 매거 값이 매거 종류에 있는 순서를 되돌려줍니다.이 순서는 매거값 성명의 순서에 따라 결정된다.
Color.RED.ordinal(); // :0
Color.BLUE.ordinal(); // :1
(2) compareTo() 메서드: Enum은 java를 구현합니다.lang. Comparable 인터페이스를 사용하여 지정된 객체의 순서와 비교할 수 있습니다.Enum의 compareTo는 두 개의 열거 값의 순서 차이를 반환합니다.물론 전제 조건은 두 개의 열거 값이 같은 열거 클래스에 속해야 한다는 것입니다. 그렇지 않으면 ClassCastException () 이상이 발생합니다.(구체적으로 보이는 소스 코드)
Color.RED.compareTo(Color.BLUE); // -1
(3)values() 방법: 정적 방법으로 모든 열거 값을 포함하는 그룹을 되돌려줍니다.
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+“,”);
}// :RED,BLUE,BLACK YELLOW,GREEN,
(4) toString() 메서드: 열거 상수의 이름을 반환합니다.
Color c=Color.RED;
System.out.println(c);// : RED
(5)valueOf() 방법: 이 방법은 toString 방법과 상응하며 지정한 이름을 가진 지정한 매거 유형의 매거 상수를 되돌려줍니다.
Color.valueOf(“BLUE”); // : Color.BLUE
(6)equals() 방법: 두 개의 열거류 대상의 인용을 비교한다.
//JDK :
public final boolean equals(Object other) {
return this==other;
}
4. 매거류는 switch 문장에서 사용할 수 있다.
Color color=Color.RED;
switch(color){
case RED: System.out.println(“it‘s red”);break;
case BLUE: System.out.println(“it's blue”);break;
case BLACK: System.out.println(“it‘s blue”);break;
}
2: 그리고 범용범용 (Generic type 또는generics) 은 자바 언어의 형식 시스템에 대한 확장으로 형식에 따라 매개 변수화할 수 있는 클래스를 만들 수 있습니다.형식 매개 변수는 매개 변수화 형식을 사용할 때 지정한 형식의 자리 차지 문자로 볼 수 있습니다. 방법의 형식 매개 변수는 실행할 때 전달되는 값의 자리 차지 문자와 같습니다.
1. 일반적인 이점:
1) 유형은 안전합니다.범주형의 주요 목표는 자바 프로그램의 유형 안전을 향상시키는 것이다.범용으로 정의된 변수의 유형 제한을 사용함으로써 컴파일러는 훨씬 높은 수준에서 유형 가설을 검증할 수 있다.범용이 없다. 이런 가설은 프로그래머의 머릿속에만 존재한다. (또는 행운이라면 코드 주석에도 존재한다.)
2) 강제 유형 변환을 제거합니다.범용적인 장점 중 하나는 원본 코드의 많은 강제 형식 변환을 없애는 것이다.이것은 코드를 더욱 읽을 수 있게 하고 오류 기회를 감소시켰다.비록 강제 유형 변환을 줄이면 범용 클래스를 사용하는 코드의 수다 정도를 낮출 수 있지만, 범용 변수는 상응하는 수다를 가져올 수 있음을 성명한다
3)・잠재적인 성능 이익.범형은 비교적 큰 최적화에 가능성을 가져온다.범주형의 초기 구현에서, 컴파일러는 강제 형식 변환 (범주형이 없으면 프로그래머가 이러한 강제 형식 변환을 지정) 을 생성된 바이트 코드에 삽입합니다.그러나 컴파일러에 더 많은 유형의 정보가 사용될 수 있다는 사실은 향후 버전의 JVM 최적화에 도움이 될 것입니다.
2. 유형 매개변수:
범용 클래스를 정의하거나 범용 클래스의 변수를 선언할 때 괄호를 사용하여 형식 유형 매개 변수를 지정합니다.형식 유형 매개 변수와 실제 유형 매개 변수 간의 관계는 형식 방법 매개 변수와 실제 방법 매개 변수 간의 관계와 유사하지만 형식 매개 변수는 형식을 표시하는 것이지 값을 표시하는 것이 아니다.
범용 클래스의 유형 매개 변수는 거의 모든 클래스 이름을 사용할 수 있는 곳에 사용할 수 있다.예를 들어 아래는java입니다.util.Map 인터페이스의 정의에 대한 발췌문:
public interface Map<K, V> {
public void put(K key, V value);
public V get(K key);
}
3. 범형은 협동하는 것이 아니다범형의 혼동에 관해서 흔히 볼 수 있는 출처는 그것이 수조처럼 협동한다고 가정하는 것이다.사실 그것들은 협동하는 것이 아니다.List
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.