Java에서 Object를 int로 캐스팅하려면 어떻게해야합니까?
intValue
생성하는 열거 형 생성자를 만들고 intValue
열거 형 상수가 해당 생성자를 호출하고 getter를 추가 할 수 있습니다 에 대한 intValue
. 그런 다음 전송하는 대신 getter를 호출하십시오.
Java에서 Object를 int로 캐스팅하려면 어떻게해야합니까?
intValue
생성하는 열거 형 생성자를 만들고 intValue
열거 형 상수가 해당 생성자를 호출하고 getter를 추가 할 수 있습니다 에 대한 intValue
. 그런 다음 전송하는 대신 getter를 호출하십시오.
답변:
이 객체가 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
정수로 내용 이 아닌 경우 를 던질 수 있습니다 .
자료 :
같은 주제에서 :
NullPointerException
의 언 박싱 동안 발생 Integer
에int
객체가 Integer
다음을 수행 할 수 있습니다.
int i = ((정수) obj) .intValue ();
객체가 객체가 아닌 경우 Integer
유형을 감지하고 유형에 따라 변환해야합니다.
intValue
오토 박싱을 호출 할 필요가 없습니다 .
intValue
int
와의 상호 교환이 가능하다는 초보자 혼란을 고려할 때 특히 명확 Integer
합니다.
객체가 인 것을 보장하는 경우 Integer
간단한 방법입니다.
int x = (Integer)yourObject;
자바에서는 Integer
, Long
, BigInteger
등 모든 구현 Number
라는 이름의 메소드가 인터페이스를 intValue
. 수치 측면이있는 다른 모든 사용자 정의 유형도 구현해야합니다 Number
(예 :) Age implements Number
. 그래서 당신은 할 수 있습니다 :
int x = ((Number)yourObject).intValue();
명령 행 (또는 텍스트 필드 등)에서 사용자 입력을 받으면이 값을로받습니다 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());
Java에는 포인터가 없습니다. 그러나 Object
에 대한 포인터와 같은 기본 구현 hashCode()
이 있으며를 통해 직접 사용할 수 있습니다 System.identityHashCode(Object o)
. 그래서 당신은 할 수 있습니다 :
int x = System.identityHashCode(yourObject);
이것은 실제 포인터 값 이 아닙니다 . ID 해시가 유지되는 동안 JVM이 객체의 메모리 주소를 변경할 수 있습니다. 또한 두 개의 살아있는 객체는 동일한 ID 해시를 가질 수 있습니다.
을 사용할 수도 object.hashCode()
있지만 유형별로 다를 수 있습니다.
같은 경우 데이터베이스 테이블의 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
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로 변환하십시오.
대답:
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;
이 경우 Object
원래로 인스턴스화 한 Integer
다음, 당신은이에 다운 캐스트 할 수 int
캐스트 연산자를 사용하여 (Subtype)
.
Object object = new Integer(10);
int i = (Integer) object;
주 당신이 적어도 자바 1.5을 사용하는 경우에만 작동하는 기능을 오토 박싱 그렇지 않으면 선언해야, i
같은 Integer
대신 다음 전화 intValue()
그것을 .
그러나 처음에 전혀 생성 Integer
되지 않았다면 그렇게 다운 캐스트 할 수 없습니다. 그것은 초래 ClassCastException
메시지의 원래 클래스 명으로. 객체의 경우 toString()
표현에 의해 얻은 String#valueOf()
나타냅니다 구문 적으로 유효한 정수 번호 (앞에 마이너스 기호와 필요에 따라 예를 들어 숫자 만), 당신은 사용할 수 있습니다 Integer#valueOf()
또는 new Integer()
이합니다.
Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
할 수 없습니다. 는 int
이 원시 형의 객체가 아닙니다. Integer로 캐스팅 한 다음 int를 가져올 수 있습니다.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
당신은 할 수 없습니다. 는 int
입니다 Object
.
Integer
입니다 Object
하지만,하지만 나는 당신이 무슨 뜻인지 의심.
String을 int로 캐스팅하려는 경우을 사용하십시오 Integer.valueOf("123")
.
대부분의 다른 객체는 int 값을 가지지 않기 때문에 int로 캐스팅 할 수 없습니다. 예를 들어 XmlDocument에는 int 값이 없습니다.
Integer.valueOf("123")
하기 Integer.parseInt("123")
때문에 필요한 것이 프리미티브 인 경우 사용하지 마십시오 .
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
ArrayList list = null;
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
while (result.next()) {
list.add(result.getInt(1));
}
statement.close();
int id[] = new int[list.size()];
for (int i = 0; i < id.length; i++) {
try {
id[i] = ((Integer) list.get(i)).intValue();
} catch(NullPointerException ne) {
} catch(ClassCastException ch) {}
}
return id;
}
// enter code here
이 코드는 왜 ArrayList
중요한지, 왜 사용 하는지를 보여줍니다 . int
에서 캐스팅하기 만하면 됩니다 Object
. 도움이 될 수 있습니다.
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
먼저 instanceof keyword로 확인하십시오. 참이면 캐스팅하십시오.
Object
가 아닌 경우Integer
캐스트에서 무엇을 기대하는지 잘 모르겠습니다.