Generify Refactoring 

 

섹션은 당신에게 Generify  리팩토링 기능에 대해 포괄적인 overview   how 리팩토링이 IntelliJ IDEA에서 사용될 있는가를 제공합니다.

개요


Generify 리팩토링 Generics-aware 것으 Generics 사용하지 않는 기존 코드를 쉽게 변형시키기 위해 디자인됩니다.  리팩토링 기존 코드를 분석하고, raw 타입을 위해 안전하고 일관된 매개 변수 형태를 추론합니다.
IDEA 자바 관점으로부터 가능한 정확한 코드를 생성하려고 노력합니다.  바꾸어 말하면, 문맥은 일부 타입 제한을 생성하고 리팩토링 모든 기존의 문맥과 함께 모순되지 않는 가장 가능한 타입을 생성합니다. 아래의  Code Sample 보십시오.

Using Generify Refactoring  


Generify 리팩토링 시작하기 위해, 번째로 코드 변환 수준, 클래스/패키지/폴더/프로젝트를 선택하십시오.



그리고 메인 메뉴에서 Refactor Generify  항목을 선택하십시오.


Generify 다이얼로그는 당신이 변경을 생성할 있는 곳에 나타납니다.

Drop obsolete  casts  

만일 선택되면, 만일 그들이 리팩토링 의해 변경되면 매개 변수 캐스트 경우가 분석됩니다.  그리고 만일 결과적인 매개 변수 타입이 매개 변수가 캐스팅되었던 유사하면, 캐스팅된 스테이트먼트는 제거됩니다.

Preserve raw  arrays  

만일 선택되면, IDEA 함께 현재 선적된 Generics 버전이 특징을 지원하지 않는 동안 배열은 parameterized 타입과 함께 변경되지 않습니다.  선택되지 않으면 배열은 변형될 것입니다. 그러나 당신이 기존 컴파일러를 사용한다면 당신은 최종적으로 컴파일 되지 않는 코드를 갖게 위험을 알고 있어야만 합니다 .

Leave Object-parameterized  types raw  

만일 선택되면 Generics 변환 이후에 그것들 중에 하나가 Object 곳에 매개 변수와 함께 모든 클래스는 raw 입니다.

Preview usages  to be generified  

체크 박스를 선택하면 당신에게 어떤 사용이 발견되었는지 계속 기억하고 있고, 그들의 교체를 승인하도록 허락합니다. 체크 박스가 선택되지 않을 , IDEA 교체를 자동적으로 수행합니다.


심지어 체크 박스가 확인되지 않았을 때도, 만일 발견된 사용이 어떤 읽기 전용 파일에서 존재하면 당신에게 사용 교체를 확인하기 위해 프롬프트 입니다.


Refactoring Preview 다이얼로그에서 (만일 그것이 나타나면) 당신은 수행된 변경을 분석할 있습니다.  리팩토링과 함께 진행하기 위해서, Do Refactor 클릭합니다그렇지 않다면 Cancel 클릭합니다. 상세한 것을 보려면 Refactoring Preview 보십시오.


코드 변환을 시작하기 위하여 Do Refactor 누르십시오.

Code Sample  

 

 
import java.util.List;
import java.util.LinkedList;
 
public class GenerifySamples {
        void generifyDeclaration() {
        List list = new LinkedList();
 
        list.add("");
    }
 
    List generifyMethodReturnType() {
        List list = new LinkedList();
 
        list.add((String) generifyMethodReturnType().get(0));
 
        return list;
    }
 
    void generifyMethodParameter(List list) {
        list.add("");
    }
 
    void covariantGenerify() {
        class Parent {
        }
        class Child extends Parent {
        }
 
        List listOfParent = new LinkedList();
 
        listOfParent.add(new Parent());
        listOfParent.add(new Child());
    }
 
    void invariantGenerify() {
        class Parent {
        }
        class Child extends Parent {
        }
 
        List listOfParent = new LinkedList();
        List listOfChild = new LinkedList();
        List rawList = new LinkedList();
 
        listOfParent.add(new Parent());
        listOfChild.add(new Child());
 
        rawList.add(listOfParent);
        rawList.add(listOfChild);
    }
 
    void safeGenerify(RawContext context) {
        List list = new LinkedList();
 
        list.add("");
 
        list = context.restrictor();
    }
 
    class Parent {
    }
 
    class Child <X> extends Parent {
        void put(X x) {
        }
    }
 
    Parent killingCast() {
        Child child = new Child();
 
        child.put("");
 
        return child;
    }
}

 

 
import java.util.List;
import java.util.LinkedList;
 
public class GenerifySamples {
        void generifyDeclaration() {
        List<String> list = new LinkedList<String>();
 
        list.add("");
    }
 
    List<String> generifyMethodReturnType() {
        List<String> list = new LinkedList<String>();
 
        list.add(generifyMethodReturnType().get(0));
 
        return list;
    }
 
    void generifyMethodParameter(List<String> list) {
        list.add("");
    }
 
    void covariantGenerify() {
        class Parent {
        }
        class Child extends Parent {
        }
 
        List<Parent> listOfParent = new LinkedList<Parent>();
 
        listOfParent.add(new Parent());
        listOfParent.add(new Child());
    }
 
    void invariantGenerify() {
        class Parent {
        }
        class Child extends Parent {
        }
 
        List<Parent> listOfParent = new LinkedList<Parent>();
        List<Parent> listOfChild = new LinkedList<Parent>();
        List<List<Parent>> rawList = new LinkedList<List<Parent>>();
 
        listOfParent.add(new Parent());
        listOfChild.add(new Child());
 
        rawList.add(listOfParent);
        rawList.add(listOfChild);
    }
 
    void safeGenerify(RawContext context) {
        List list = new LinkedList();
 
        list.add("");
 
        list = context.restrictor();
    }
 
    class Parent {
    }
 
    class Child <X> extends Parent {
        void put(X x) {
        }
    }
 
    Parent killingCast() {
        Child child = new Child();
 
        child.put("");
 
        return child;
    }
}