>  기사  >  Java  >  Java의 일반적인 메커니즘에 대해 이야기합시다.

Java의 일반적인 메커니즘에 대해 이야기합시다.

王林
王林앞으로
2021-01-27 09:59:062229검색

Java의 일반적인 메커니즘에 대해 이야기합시다.

인터뷰어: Java의 일반적인 메커니즘이 무엇인지 알려주세요.

(학습 동영상 공유: java 동영상 튜토리얼)

Lite 버전 답변

Java를 개발할 때 다이아몬드 구문 5d3f51a758aa7aa0cba3aa2acf5adbfe 꺾쇠 괄호가 제거되고 꺾쇠 괄호 안의 규칙에 따라 특정 클래스로 대체되므로 Jvm이 전혀 실행되지 않습니다. 이는 호환성을 위해 수행된 것으로, 앞서 언급한 바와 같이 제네릭은 JDK1.5에서만 도입되었기 때문에 기존 JVM을 크게 수정할 필요는 없습니다. 컴파일러가 인식할 수 있지만 가상 머신에서는 인식할 수 없는 일종의 구문을 사람들은 이 구문을 설탕(suger)이라고 부릅니다. 컴파일러가 이를 해독한 후 실행을 위해 가상 머신에 맡깁니다.

(권장 그래픽 튜토리얼: Java 입문 튜토리얼)

일반 삭제 메커니즘

//Pair的泛型
public class Pair<T> {

    private T mFirst;
    private T mSecond;

    public T getmFirst() {
        return mFirst;
    }

    public void setmFirst(T mFirst) {
        this.mFirst = mFirst;
    }

    public T getmSecond() {
        return mSecond;
    }

    public void setmSecond(T mSecond) {
        this.mSecond = mSecond;
    }
}

//Pair的原始类型
//无论何时定义一个泛型类型,都会自动提供一个相应的 原始类型
public class Pair {

    private Object mFirst;
    private Object mSecond;

    public Object getFirst() {
        return mFirst;
    }

    public void setFirst(Object mFirst) {
        this.mFirst = mFirst;
    }

    public Object getSecond() {
        return mSecond;
    }

    public void setmSecond(Object mSecond) {
        this.mSecond = mSecond;
    }
}

//如果调用Pair<T extends String>编译擦除后得到如下=
class Pair{
    private String mFirst;
    private String mSecond;
    ...
}

제네릭이 메소드의 입력 매개변수로 사용되면 삭제 후 와일드카드 제네릭의 하한으로 대체됩니다. add 메소드

public static void insertElements(List<? super A> list){
    //Add进来的都是层级“小于等于”A的,也就是下界
    list.add(new A());
    list.add(new B());
    list.add(new C());
}

제네릭이 메소드의 반환 매개변수로 사용되면 삭제 후 get 메소드와 같은 와일드카드 제네릭의 상한으로 대체됩니다.

public void processElements(List<? extends A> elements){
   //for循环挨个get list 里的数据,都当做A,也就是都当做上界
   for(A a : elements){
      System.out.println(a.getValue());
   }
}

제네릭 유형에 대해 아무리 말해도 삭제 및 내가 읽은 블로그 수는 공식 정의만큼 좋지 않습니다. 정확합니다. 여기에 유형 삭제에 대한 Oracle 공식 문서 섹션이 있습니다.

Type Erasure
Generics were introduced to the Java language to provide tighter type checks at compile time and to support generic programming. To implement generics, the Java compiler applies type erasure to:
Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods.Insert type casts if necessary to preserve type safety.Generate bridge methods to preserve polymorphism in extended generic types.Type erasure ensures that no new classes are created for parameterized types; consequently, generics incur no runtime overhead.

더 많은 인터뷰 질문을 보려면 다음을 클릭하세요: java 인터뷰 질문 및 답변

위 내용은 Java의 일반적인 메커니즘에 대해 이야기합시다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제