Java에서 Object를 int로 캐스팅하려면 어떻게해야합니까?
답변
이 객체가 Integer
:
int i = (Integer) object;
또는 Java 7부터 다음과 같이 작성할 수 있습니다.
int i = (int) object;
, 그것은을 던질 수 조심 ClassCastException
개체가없는 경우 Integer
와를 NullPointerException
개체 인 경우null
.
이렇게하면 Object가 Integer (wrap)라고 가정하고 int로 unbox합니다.
int
는 프리미티브이므로로 저장할 수 없으며 Object
유일한 방법은로 int
간주 하여 상자에 Integer
넣은 다음로 저장하는 것 Object
입니다.
객체가 인 경우 메소드를 String
사용하여 Integer.valueOf()
간단한 int로 변환 할 수 있습니다 .
int i = Integer.valueOf((String) object);
NumberFormatException
객체가 실제로 String
정수로 내용 이 아닌 경우 를 던질 수 있습니다 .
자료 :
같은 주제에서 :
답변
객체가 Integer
다음을 수행 할 수 있습니다.
int i = ((정수) obj) .intValue ();
객체가 객체가 아닌 경우 Integer
유형을 감지하고 유형에 따라 변환해야합니다.
답변
시나리오 1 : 간단한 사례
객체가 인 것을 보장하는 경우 Integer
간단한 방법입니다.
int x = (Integer)yourObject;
시나리오 2 : 숫자 개체
자바에서는 Integer
, Long
, BigInteger
등 모든 구현 Number
라는 이름의 메소드가 인터페이스를 intValue
. 수치 측면이있는 다른 모든 사용자 정의 유형도 구현해야합니다 Number
(예 🙂 Age implements Number
. 그래서 당신은 할 수 있습니다 :
int x = ((Number)yourObject).intValue();
시나리오 3 : 숫자 텍스트 구문 분석
명령 행 (또는 텍스트 필드 등)에서 사용자 입력을 받으면이 값을로받습니다 String
. 이 경우 다음을 사용할 수 있습니다 Integer.parseInt(String string)
.
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
로 입력을 받으면을 Object
사용 (String)input
하거나 다른 텍스트 유형을 가질 수있는 경우 input.toString()
:
int x = Integer.parseInt(input.toString());
시나리오 4 : ID 해시
Java에는 포인터가 없습니다. 그러나 Object
에 대한 포인터와 같은 기본 구현 hashCode()
이 있으며를 통해 직접 사용할 수 있습니다 System.identityHashCode(Object o)
. 그래서 당신은 할 수 있습니다 :
int x = System.identityHashCode(yourObject);
이것은 실제 포인터 값 이 아닙니다 . ID 해시가 유지되는 동안 JVM이 객체의 메모리 주소를 변경할 수 있습니다. 또한 두 개의 살아있는 객체는 동일한 ID 해시를 가질 수 있습니다.
을 사용할 수도 object.hashCode()
있지만 유형별로 다를 수 있습니다.
시나리오 5 : 고유 색인
같은 경우 데이터베이스 테이블의 ID 값을 자동 증분하는 것과 같이 고유하지 않은 ID 해시와는 달리 각 개체마다 고유 한 인덱스가 필요합니다. 이를위한 간단한 샘플 구현 :
class ObjectIndexer {
private int index = 0;
private Map<Object, Integer> map = new WeakHashMap<>();
public int indexFor(Object object) {
if (map.containsKey(object)) {
return map.get(object);
} else {
index++;
map.put(object, index);
return index;
}
}
}
용법:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
시나리오 6 : 열거 형 멤버
Java 열거 형 멤버는 정수가 아니라 완전한 기능을 갖춘 객체입니다 (예 : C / C ++과 달리). 아마도 enum 객체를로 변환 할 필요는 int
없지만 Java는 색인 번호를 각 enum 멤버에 자동으로 연결합니다. 이 색인은 Enum.ordinal()
예를 들어 다음을 통해 액세스 할 수 있습니다 .
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
답변
@Deprecated
public static int toInt(Object obj)
{
if (obj instanceof String)
{
return Integer.parseInt((String) obj);
} else if (obj instanceof Number)
{
return ((Number) obj).intValue();
} else
{
String toString = obj.toString();
if (toString.matches("-?\d+"))
{
return Integer.parseInt(toString);
}
throw new IllegalArgumentException("This Object doesn't represent an int");
}
}
보시다시피, 이것은 매우 효율적인 방법은 아닙니다. 당신은 단순히 당신이 어떤 종류의 물건을 가지고 있는지 확인해야합니다. 그런 다음 올바른 방법으로 int로 변환하십시오.
답변
Integer (int의 래퍼 클래스)로 캐스팅해야합니다. 그런 다음 Integer의 intValue () 메서드를 사용하여 내부 int를 얻을 수 있습니다.
답변
대답:
int i = ( Integer ) yourObject;
개체가 이미 정수인 경우 원활하게 실행됩니다. 즉 :
Object yourObject = 1;
// cast here
또는
Object yourObject = new Integer(1);
// cast here
기타
객체가 다른 것이라면, 가능한 경우 먼저 객체를 int로 변환해야합니다.
String s = "1";
Object yourObject = Integer.parseInt(s);
// cast here
또는
String s = "1";
Object yourObject = Integer.valueOf( s );
// cast here
답변
GSON에서 데이터를 처리 할 때 하나의 라이너를 사용합니다.
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;