Groovy 는 자바 에 비해 새로운 것 입 니 다.
.?
를 제공한다 자바 플랫폼 의 핵심 장점 은 자바 개발 패키지 (JDK) 다.Groovy 는 자바 를 떠 나 새로운 클래스 와 라 이브 러 리 를 만 들 지 않 고 앞으로 JDK 의 다양한 클래스 에 편리 한 방법 을 추가 하여 GDK 로 확대 했다.그 중 일부 상용 류 는 모두 괜 찮 은 확장 이 있다.
순환 을 실현 하 는 집중 방식
다음은 인쇄 0 ~ 9 의 순환 을 실현 하 는 것 을 예 로 들 자.
좀 더 깔끔 한 자바 빈.
groovy 의 bean 대상 에서 정 의 된 속성 은 당연히
foo.bar
방식 으로 접근 할 수 있 지만 이러한 접근 방식 은 직접 방문 하 는 bar 라 는 변수 가 아니 라 방문 하 는 getBar / setBar 방법 입 니 다.클래스 에서 하나의 속성 을 설명 하면 groovy 는 묵묵히 우리 에 게 대응 하 는 get 과 set 방법 을 생 성 합 니 다. 이 속성 이 final 형식 이 라면 get 방법 만 있 습 니 다.우 리 는 당연히 스스로 수 동 으로 대응 하 는 get / set 방법 을 실현 하여 더욱 풍부 한 내용 을 실현 할 수 있다.foo.bar
속성 에 접근 한 상황 에서 bar 의 수식 자 를 private 로 바 꾸 는 것 은 의미 가 없습니다. 이 변 수 를 직접 방문 하지 않 기 때문에 bar 변 수 를 일정한 보호 하고 getBar / setBar 방법 에 대응 하 는 수 동 으로 덮어 쓰 며 이 방법의 권한 을 수정 하여 속성 을 보호 하 는 목적 을 달성 하 였 습 니 다.우 리 는 심지어 속성 을 정의 하지 않 을 수도 있다.클래스 에 getBar () 방법 이 포함 되 어 있다 면 이 방법 을 호출 할 때 사용 할 수 있 습 니 다
foo.bar
. 그러나 get 방법 만 실현 되 었 을 뿐 읽 을 수 있 고 이 방식 으로 값 을 부여 할 수 없습니다. 예 를 들 어 foo.bar = xxx
형식의 할당 을 하려 면 클래스 에 setBar () 방법 이 대응 해 야 합 니 다.자바 빈 초기 화
만약 에 한 Bean 대상 에 여러 개의 속성 이 포함 되 어 있다 면 그 속성 이 다른 할당 값 에 대해 다양한 매개 변수 조합의 구조 방법 을 제공 해 야 할 수도 있 고 groovy 에서 편리 하 게 실현 할 수 있 습 니 다.전제: 이 종 류 는 반드시 무 참 구조 기 가 있어 야 한다 (정의 구조 기 가 없 으 면 당연히 무 참 구조 기 를 자동 으로 생 성 할 것 이다).만약 에 파 라 메 트릭 구조 기 를 정의 하면 컴 파일 러 는 파 라 메 트릭 구조 기 를 제공 하지 않 을 것 이 고 우리 가 수 동 으로 파 라 메 트릭 구조 기 를 제공 해 야 한다.사용: new Foo (property 1: value 1, property 2: value 2, property 3: value 3);값 이 맞 는 방식 으로 값 을 부여 하고 싶 은 속성의 이름과 값 을 입력 하면 됩 니 다.이 문 구 는 무 참 구조 기 를 실행 한 후 들 어 오 는 속성 에 대해 set 작업 을 순서대로 수행 합 니 다.
유연 한 방법 매개 변수 규칙
규칙 1: 방법의 첫 번 째 형 삼 은 기본적으로 맵 일 수 있 습 니 다
다음 방법 에 대한 정의:
def bar(a,b,c){
println "received $a $b $c"
}
groovy 의 동적 유형의 언어 는 방법 을 정의 할 때 형 삼 유형 을 지정 하지 않 고 사용 할 때 동적 으로 추정 할 수 있 기 때문이다.이 방법 은 대상 의 toString 방법 을 호출 합 니 다.그러면 이 방법 을 사용 할 때 들 어 오 는 매개 변수 개수 가 3 보다 많 고 더 많은 실현 이 키 쌍 이 라면 Groovy 는 이 방법의 첫 번 째 형 삼 이 map 형식 이 라 고 가정 한 다음 에 실제 인삼 목록 의 모든 키 쌍 을 하나의 map 에 넣 고 첫 번 째 매개 변수 로 전송 한 다음 에 나머지 매개 변 수 를 형 삼 에 따라 일일이 대응 하여 전 삼 합 니 다.
여기 서 주의해 야 할 문 제 는 두 가지 가 있다.
규칙 2: 선택 가능 한 인삼
간단 한 예:
def bar(a,b=10){
println a + b
}
assert bar(1,1) == 2
assert bar(1) == 11
규칙 3: 길 어 지 는 매개 변수
groovy 에는 두 가지 형식 으로 지원 하 는 방법 이 있 습 니 다.
// ... Java
def bar(int a,int ... b){
println "$a and $b"
}
// , a , b
def bar(int a,int b[]){
println "$a and $b"
}
여기 서 주의해 야 할 것 은 이 방법 을 호출 할 때 이산 값 이 아 닌 배열 을 보 내 려 면 groovy 는 [1, 2, 3] 와 같은 형식의 배열 을 배열 이 아 닌 List 로 생각 하기 때문에 들 어 올 때 명시 적 으로 들 어 와 야 한 다 는 것 이다
[1,2,3] as int[]
.방법 은 여러 값 을 되 돌 릴 수 있다.
자바 에 서 는 방법 이 많 으 면 한 값 을 되 돌려 줄 수 있 지만 groovy 에 서 는 여러 값 을 되 돌려 줄 수 있 습 니 다.groovy 의 동태 성 때문에 여러 개의 반환 값 을 배열 에 넣 을 수 있 습 니 다. 구체 적 인 유형 은 상관 하지 않 아 도 됩 니 다 (자바 의 배열 의 값 유형 은 일치 해 야 합 니 다).
그럼 다음은 방법의 반환 값 수신 문 제 를 해결 해 야 합 니 다.groovy 는 이렇게 처리 합 니 다. 여러 변 수 를 쉼표 로 구분 하여 괄호 에 넣 고 방법 이 돌아 오 는 왼쪽 에 두 면 됩 니 다.
def f2(){
['abc',1]
}
(name,age) = f2()
() 에서 변수 와 반환 값 의 수량 이 일치 하지 않 을 때: 불필요 한 변수 가 있 으 면 null 로 설정 합 니 다.만약 여분의 값 이 있다 면, 여분의 값 은 버 려 진다.
조작 부호 과부하
groovy 의 조작 부 호 는 다시 불 러 올 수 있 습 니 다. groovy 는 이미 조작 부호 와 미리 설 정 된 방법 을 연결 하 였 습 니 다. 우리 클래스 에서 대응 하 는 방법 (어떠한 구실 도 실현 하지 않 아 도) 을 실현 하면 해당 대상 은 해당 하 는 조작 부 호 를 호출 할 수 있 습 니 다.
따라서 클래스 의 방법 에 이름 을 지 을 때 는 조작 자 맵 의 방법 명 에 맞 게 불필요 한 번 거 로 움 이 생기 지 않도록 조심 하 는 것 이 좋다.
gradle 에서 자주 사용 되 는 조작 부 호 는
<<
이 고 이에 대응 하 는 방법 은 left Shift 이 며 그 의 미 는 append
와 유사 하 며 대상 에 멤버 를 추가 하 는 것 이다.자동 포장
groovy 2.0 이전에 기본 유형 은 모두 대상 으로 처리 되 었 다.groovy 2.0 이후 기본 유형 은 필요 할 때 만 대상 으로 간 주 됩 니 다. eg: Integer 를 호출 하 는 방법 으로 기본 유형 을 대상 에 게 전달 합 니 다.그 밖 에 Groovy 는 바이트 코드 단계 에서 이 를 기본 유형 으로 유지 하여 성능 을 향상 시 키 는 목적 을 달성 할 것 이다.
groovy 코드 로 변환 생 성
groovy 에 서 는 대응 코드 를 만 들 고 개발 절 차 를 간소화 하 는 데 많은 주 해 를 제공 합 니 다.여기 서 가장 자주 사용 하 는
@Immutable
주 해 를 간단하게 말씀 드 리 겠 습 니 다. 이 주 해 는 수식 류 에 사 용 됩 니 다. 이 주해 로 클래스 를 표시 하면 이 클래스 의 모든 필드 는 자동 으로 final 로 표시 되 고 유일한 구조 기 를 추가 로 만 듭 니 다. 그 매개 변 수 는 클래스 에서 필드 를 설명 하 는 순서 입 니 다.그루 브 이의 결함
==
등가 자바 의 equals 방법 을 비교 하려 면 두 인용 이 같 는 지 비교 하려 면 groovy 에서 제공 하 는 방법 은 is()
{}
로 코드 를 패키지 하여 새로운 역할 영역 을 정의 할 수 있 습 니 다. 이러한 문법 은 groovy 에서 패 킷 을 정의 하 는 것 으로 여 겨 져 컴 파일 이 통과 되 지 못 합 니 다 class Foo{
def bar = 1
{
println "I'am instance initializer"
}
}
Foo 류 에서 대상 의 초기 코드 블록 을 정의 하려 고 했 으 나 이러한 구 조 는 속성 에 의존 하 는 일부분 으로 여 겨 졌 다. 앞의 bar 는 정의 가 끝 난 후에 가산 점 번호 가 없 기 때문에 이런 상황 이 발생 하면 bar 정의 가 끝 난 후에 분점 으로 끝내 야 한다.물론 정적 코드 블록 이 었 다 면 이 문 제 는 없 었 을 것 이다.more
더 많은 내용 은 공식 문 서 를 참고 하 시기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.