문제

사전을 선언하려고 할 때 :

private Dictionary<String, int> map;

컴파일러는 다음과 같은 오류를 제공합니다.

토큰 "int"의 구문 오류,이 토큰 이후에 예상되는 치수

그러나 그것은 잘 작동합니다 Integer. 나는 Java가 대우한다는 것을 모호하게 알고 있습니다 int / Integer 다르게 (나는 .NET 배경에서 나왔지만) 누군가가 사전에서 프리미티브를 사용할 수없는 이유에 대한 자세한 설명을 할 수 있기를 바랐다.

도움이 되었습니까?

해결책

Java Primitives는 객체가 아니므로 물체 대신 사용할 수 없습니다. 그러나 Java는 자동으로 박스/Unbox Primitives (일명 오토 옥싱) 객체로 : 다음과 같은 작업을 수행 할 수 있습니다.

List<Integer> intList = new LinkedList<Integer>();
intList.add(1);
intList.add(new Integer(2));
...
Integer first = intList.get(0);
int second = intList.get(1);

그러나 이것은 실제로 컴파일러 일뿐입니다.

다른 팁

.NET에서 "원시"유형은 객체에 의해 뒷받침됩니다. Java에서는 원시 유형과 물체 사이에 어려운 차이가 있습니다. Java 5는 특정 상황에서 두 가지를 강요 할 수있는 오토 옥싱을 도입했습니다. 그러나 Java Generics 시스템은 유형 발전을 사용하기 때문에이 경우 Autobox에 대한 정보가 충분하지 않습니다.

Java Collections는 원시적이 아닌 참조 만 허용합니다. 래퍼 클래스 (이 경우 java.lang.integer)를 사용하여 다음을 수행해야합니다.

private Dictionary<String, Integer> map;

그들은 당신이 다음과 같은 일을 할 수 있습니다.

int foo = map.get("hello");

그리고

map.put("world", 42);

그리고 Java는 자서전/Unboxing을 사용하여 전환의 세부 사항을 처리합니다.

여기 그것에 대한 약간의 설명입니다.

Tofubeer의 답변을 확장합니다.

int는 원시입니다

정수는 대상입니다.

제네릭은 프리미티브를 지원하지 않습니다.

@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)

그것이 프리미티브와 함께 작동하도록 유형을 지정하는 트릭입니다.

어댑터에서

패키지 -info에서 동일하게 사용하면 해당 패키지에 대해 전 세계적으로 수행 할 수 있습니다.

실험 후 이것을 발견했습니다.

public class MyAdapter extends XmlAdapter<String, Integer> {

Java에서는 프리미티브가 진정으로 원시적이기 때문입니다. 자바에서 int 가치에 따라 통과합니다 Integer 참조를 통과합니다. .NET int 또는 int32 등의 이름은 다른 이름입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top