728x90
반응형

Generics 6

Java에서 일반 배열을 만드는 방법

질문 : Java에서 일반 배열을 만드는 방법은 무엇입니까? Java 제네릭 구현으로 인해 다음과 같은 코드를 가질 수 없습니다. public class GenSet { private E a[]; public GenSet() { a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation } } 형식 안전성을 유지하면서 어떻게 구현할 수 있습니까? Java 포럼에서 다음과 같은 솔루션을 보았습니다. import java.lang.reflect.Array; class Stack { public Stack(Class clazz, int capacity) { array = (T[])Array.newInstance(clazz, capacity); } pr..

JAVA의 원시 유형은 무엇이며 왜 사용하지 않아야 하는가?

질문 : 원시 유형은 무엇이며 왜 사용하지 않아야합니까? Java의 원시 유형은 무엇이며 새 코드에서 사용해서는 안된다는 말을 자주 듣는 이유는 무엇입니까? 원시 유형을 사용할 수없는 경우 대안은 무엇이며 어떻게 더 나은가요? 답변 Java 언어 사양은 다음과 같이 원시 유형을 정의합니다. 원시 유형은 다음 중 하나로 정의됩니다. 수반되는 형식 인수 목록없이 제네릭 형식 선언의 이름을 사용하여 형성되는 참조 형식입니다. 요소 유형이 원시 유형 인 배열 유형입니다. 비 static 원시 형의 부재 형 R 의 수퍼 또는 슈퍼로부터 상속되지 R . 다음은 설명을위한 예입니다. public class MyType { class Inner { } static class Nested { } public static..

Java 7에서 다이아몬드 연산자 (<>)를 사용해야 하는 이유

질문 : Java 7에서 다이아몬드 연산자 ()의 요점은 무엇입니까? Java 7의 다이아몬드 연산자는 다음과 같은 코드를 허용합니다. List list = new LinkedList(); 그러나 Java 5/6에서는 간단히 다음과 같이 작성할 수 있습니다. List list = new LinkedList(); 유형 삭제에 대한 나의 이해는 이것들이 정확히 동일하다는 것입니다. (어쨌든 제네릭은 런타임에 제거됩니다). 왜 다이아몬드에 신경을 쓰나요? 어떤 새로운 기능 / 유형 안전성이 허용됩니까? 새로운 기능이 생성되지 않으면 왜 기능으로 언급합니까? 이 개념에 대한 나의 이해에 결함이 있습니까? 답변 문제 List list = new LinkedList(); 왼쪽에서는 일반 유형 List 을 사용하고 ..

Java 제네릭이 암시 적으로 다형성이 아닌 이유

질문 : 목록 List의 하위 클래스 ? Java 제네릭이 암시 적으로 다형성이 아닌 이유는 무엇입니까? Java 제네릭이 상속 / 다형성을 처리하는 방법에 대해 약간 혼란 스럽습니다. 다음 계층을 가정합니다. 동물 (부모) 개 - 고양이 (어린이) doSomething(List animals) 메서드가 있다고 가정합니다. 상속 및 다형성의 모든 규칙에 따라 List 가 List 이고 List 이 List 하므로 둘 중 하나를이 메서드에 전달할 수 있습니다. 별로. doSomething(List

Java에서 SuppressWarnings ( "unchecked")의 의미

질문 : Java에서 SuppressWarnings ( "선택 취소") 란 무엇입니까? 때때로 코드를 살펴볼 때 많은 메서드가 주석을 지정하는 것을 볼 수 있습니다. @SuppressWarnings("unchecked") 이것은 무엇을 의미 하는가? 답변 때때로 자바 제네릭은 당신이 원하는 것을 할 수 없게하고, 당신이하고있는 일이 실제로 실행 시간에 합법적 이라는 것을 컴파일러에게 효과적으로 알려줄 필요가 있습니다. 일반적으로 일반적인 인터페이스를 조롱 할 때 이것이 고통 스럽지만 다른 예도 있습니다. 그것은 경고를 피하는 것이 아니라 그것을 억제하는 방법을 해결하려고 노력 일반적으로 가치가합니다 ( 자바 제네릭 FAQ는 여기에 있습니다)하지만 때로는 그것이 가능하다면, 그것은 너무 많은 경고를 억제하..

Java에서 일반 유형의 인스턴스를 만드는 방법

질문 : Java에서 일반 유형의 인스턴스를 만드시겠습니까? Java에서 제네릭 유형의 인스턴스를 만들 수 있습니까? no ( type erasure로 인해) 라는 것을 본 것을 기반으로 생각하고 있지만 누군가 내가 놓친 것을 볼 수 있다면 관심이있을 것입니다. class SomeContainer { E createContents() { return what??? } } 편집 : Super Type Tokens를 사용하여 내 문제를 해결할 수 있지만 아래 답변 중 일부에서 알 수 있듯이 많은 반사 기반 코드가 필요합니다. Ian Robertson의 Artima Article 과 극적으로 다른 것을 생각해내는 사람이 있는지 확인하기 위해 잠시이 내용을 열어 두겠습니다. 답변 당신이 올바른지. new E()..

728x90
반응형