2013-08-01 3 views
5

정확히 "유형이 강력 함"과 "유형 안전"의 차이점을 정확히 알지 못합니다.Arraylist는 타입 세이프인가 강건한 타이프인가?

간단한 언어로 설명해 주시겠습니까?

Arraylist를 사용한다고 가정하겠습니다. 유형이 안전하거나 강력하게 입력되었다고 결론을 내릴 수 없습니다. 아니면 둘 다 사용할 수 있습니까?

+0

"강력하게 형식화"는 일반적으로 프로그래밍 언어에 적용되는 반면 "형식 안전성"은 "형식 안전성"구문에서 오는 것일 수 있습니다 ... –

답변

6

ArrayList은 타입 안전하지 않습니다. 이것이 의미하는 것은 ArrayList는 모든 유형의 값을 할당 할 수 있다는 것입니다 : 당신이 목록을 사용하여 갈 때, 당신은 목록에있는 유형을 알 수 없기 때문에

ArrayList myList = new ArrayList(); 
myList.Add("this is a string"); 
myList.Add(19); //Notice that this is an int, but it doesn't throw an error! 

이이 문제입니다. 던져진 과실의 기회는 아주 높습니다.

ArrayLists! List<T>

6

유형 안전하고 강력한 형식의 문구가로드되어있어 어디에서나 프로그래머에게 정확한 정의를 고정시킬 수 없습니다. 그러나 ArrayLists가 중요하다는 모든면에서 도 아닌지에 대한 충분한 합의가 있습니다.

ArrayLists를 사용하지 마십시오! 대신 일반 List<T> 컬렉션을 사용하십시오.

+0

arraylist가 아니며 TypeSafe가 아니며 강력하게 형식화되었음을 의미합니다. –

+0

의미 있음 컬렉션 내에 저장된 항목에 대해서도 적용하지 않습니다. –

+0

그러나 짧은 결론은 동일합니다. TypeSafe도 강력하게 타입 화되지 않았기 때문입니다. –

0

데이터 구조는 유형 안전하지 않으며 강력한 형식이 아닙니다. 어떤 유형의 개체가 ArrayList에 있는지 보장 할 수 없으므로 ASP.NET의 경우 Session 캐시에 개체를 저장하는 방법과 비슷한 모든 것이 Object으로 저장됩니다.

ArrayList을 사용할 때 가장 큰 단점은 실제 목록에있는 개체에 액세스하려고 할 때마다 발생해야하는 캐스팅이었습니다. 목록에있는 값 중 예상했던 유형이 아닌 경우 캐스팅 예외가 발생할 수 있으며이를 처리 할 코드는 단지 추한 것입니다.

가능하면 List<T>ArrayList 데이터 구조에 가장 유사한 제네릭 형식 인 제네릭을 사용하십시오.

0

귀하의 질문에 대한 확신이 없습니다.

"강력 함/약한 유형"은 프로그래밍 언어의 품질입니다. Java는 강력한 형식이므로 엄격한 구문을 사용하므로 오류가 런타임에 실행되기 전에 컴파일 타임에 코드에서 문제를 찾을 수 있습니다.

Java가 정확하게 형식 안전하지 않을 수도 있지만 정확한 대답은 확실하지 않습니다. 그것은 제네릭을 허용합니다. 즉, 문자열의 ArrayList (ArrayList<String>), 정수의 ArrayList (ArrayList<Integer>), 부울의 ArrayList (ArrayList<Boolean>)를 만들 수 있습니다. ArrayList<T><T>을 모든 개체로 대체 할 수 있음을 의미합니다. 당신은 심지어 어떤 아이의 ArrayList가있을 수 있습니다

class Admin extends User { 
    //Stuff 
} 
class Student extends User { 
    //Stuff 
} 
class Teacher extends User { 
    //Stuff 
} 

: ArrayList<? extends T>는 T.

를 확장 등 모든 A, B, C, 감자,

는 다음과 같은 수업을 말과 대체 할 수 있음을 의미 사용자 개체 (예 : ArrayList<User>). 이 목록에 학생, 관리자교사를 추가 할 수 있습니다. 개체입니다.

그러나이 ArrayList가 보유하고있는 데이터 형식을 지정하지 않으면 (예 : List l = new ArrayList();) 개체을 입력 할 수 있으므로 형식이 안전하지 않습니다.

제네릭 남용의 예 can be seen on Wikipedia.

+1

완벽합니다.하지만 제 질문은 매우 분명하다고 생각합니다. Generic은 우리가 typesafe 구현을 위해 사용하는 방법입니다. 그러나 Arraylist는 기본으로 typesafe도 강력하지 않습니다. 이 진술입니다. –