Java'da int nesnesine nasıl Nesne atabilirim?
intValue
), sıralamanız için bir yapıcı oluşturun intValue
, enum sabitlerinizin bu yapıcıyı çağırmasını sağlayın ve bir alıcı ekleyin için intValue
. Ardından, döküm yapmak yerine alıcıyı arayın.
Java'da int nesnesine nasıl Nesne atabilirim?
intValue
), sıralamanız için bir yapıcı oluşturun intValue
, enum sabitlerinizin bu yapıcıyı çağırmasını sağlayın ve bir alıcı ekleyin için intValue
. Ardından, döküm yapmak yerine alıcıyı arayın.
Yanıtlar:
Bu nesnenin aşağıdakilerden biri olduğundan eminseniz Integer
:
int i = (Integer) object;
Veya, Java 7'den başlayarak, eşdeğer şekilde yazabilirsiniz:
int i = (int) object;
Dikkat edin, ClassCastException
nesneniz Integer
bir NullPointerException
değilse ve nesneniz ise bir null
.
Bu şekilde, Nesnenizin bir Tamsayı (sarılmış int) olduğunu ve bunu bir int olarak açtığınızı varsayarsınız.
int
bir ilkeldir, bu yüzden bir olarak saklanamaz Object
, tek yol olarak int
düşünülen / kutulanmış Integer
olarak bir Object
.
Nesneniz a ise String
, Integer.valueOf()
yöntemi basit bir int'e dönüştürmek için kullanabilirsiniz :
int i = Integer.valueOf((String) object);
NumberFormatException
Nesneniz gerçekten String
bir tamsayı içeriğine sahip değilse bir a atabilir .
Kaynaklar:
Aynı konuda:
NullPointerException
Ait kutudan çıkarma esnasında oluşacak Integer
içineint
Nesnenin bir nesne olduğunu varsayarsak, Integer
bunu yapabilirsiniz:
int i = ((Tamsayı) obj) .intValue ();
Nesne bir Integer
nesne değilse , türü algılamanız ve türüne göre dönüştürmeniz gerekir.
intValue
Otomatik boks için çağırmanıza gerek yok , onu sizin için çağırır.
intValue
özellikle birbiriyle int
değiştirilebilir olma arasındaki başlangıçtaki karışıklık göz önüne alındığında çok daha nettir Integer
.
Nesnenizin bir olduğu garanti edilirse Integer
, bu basit yoldur:
int x = (Integer)yourObject;
Java'da Integer
, Long
, BigInteger
vb tüm uygulamak Number
adında bir yöntemi vardır arayüz intValue
. Sayısal yönü olan diğer özel türler de uygulanmalıdır Number
(örneğin:) Age implements Number
. Böylece yapabilirsiniz:
int x = ((Number)yourObject).intValue();
Komut satırından (veya metin alanı vb.) Kullanıcı girişini kabul ettiğinizde String
. Bu durumda şunları kullanabilirsiniz Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Eğer girdi olarak alırsanız Object
, kullanabileceğiniz (String)input
bir diğer metinsel türü olabilir, eğer, ya input.toString()
:
int x = Integer.parseInt(input.toString());
Java'da işaretçi yoktur. Ancak Object
, hashCode()
üzerinden doğrudan kullanılabilen işaretçi benzeri bir varsayılan uygulamaya sahiptir System.identityHashCode(Object o)
. Böylece yapabilirsiniz:
int x = System.identityHashCode(yourObject);
Bunun gerçek bir işaretçi değeri olmadığını unutmayın . Nesnelerin bellek adresleri, kimlik karmaları korunurken JVM tarafından değiştirilebilir. Ayrıca, iki canlı nesne aynı kimlik karmasına sahip olabilir.
Ayrıca kullanabilirsiniz object.hashCode()
, ancak türe özgü olabilir.
Aynı durumlarda, veritabanı tablosundaki ID değerlerini otomatik olarak artırmak (ve benzersiz olmayan kimlik karmasının aksine) gibi, her nesne için benzersiz bir dizine ihtiyacınız vardır. Bunun için basit bir örnek uygulama:
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;
}
}
}
Kullanımı:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Java enum üyeleri tamsayı değil tam özellikli nesnelerdir (örneğin C / C ++ 'dan farklı olarak). Muhtemelen bir enum nesnesini dönüştürmeye hiç gerek yoktur int
, ancak Java otomatik olarak her bir enum üyesiyle bir dizin numarası ilişkilendirir. Bu indekse, Enum.ordinal()
örneğin:
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");
}
}
Gördüğünüz gibi, bu çok etkili bir yöntem değil. Sadece ne tür bir nesneye sahip olduğunuzdan emin olmalısınız. Sonra doğru bir int dönüştürmek.
Bir Integer'a (int'in sarmalayıcı sınıfı) atamanız gerekir. Daha sonra iç int elde etmek için Integer'ın intValue () yöntemini kullanabilirsiniz.
Cevap:
int i = ( Integer ) yourObject;
Nesneniz zaten bir tamsayı ise, düzgün çalışır. yani:
Object yourObject = 1;
// cast here
veya
Object yourObject = new Integer(1);
// cast here
vb.
Nesneniz başka bir şeyse, onu (mümkünse) önce int'ye dönüştürmeniz gerekir:
String s = "1";
Object yourObject = Integer.parseInt(s);
// cast here
Veya
String s = "1";
Object yourObject = Integer.valueOf( s );
// cast here
GSON'dan veri işlerken tek astar kullanıyorum:
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
Eğer Object
başlangıçta bir şekilde örneklerle desteklendi edildi Integer
, o zaman bir o downcast edebilirsiniz int
döküm operatörü kullanılarak (Subtype)
.
Object object = new Integer(10);
int i = (Integer) object;
Not Birlikte en az Java 1.5 kullanırken bu sadece çalışır özelliği Autoboxing aksi takdirde beyan etmek zorunda, i
olarak Integer
yerine ve sonra çağrı intValue()
üzerine .
Ama başlangıçta bir olarak yaratılmamışsa Integer
, o zaman böyle mahzun olamazsınız. Bu ClassCastException
, iletide orijinal sınıf adına sahip bir a ile sonuçlanır . Nesnenin toString()
elde ettiği String#valueOf()
şekliyle ifadesi, sözdizimsel olarak geçerli bir tamsayı numarasını belirtirse (örneğin, eksi işareti önde ise yalnızca basamaklar), bunun için Integer#valueOf()
veya öğesini kullanabilirsiniz new Integer()
.
Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
Yapamam. An int
bir nesne değil, ilkel bir tiptir. Tamsayıya yayınlayabilir, ardından int'i alabilirsiniz.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Yapamazsın. An int
bir değildir Object
.
Integer
bir olduğunu Object
gerçi, ama ben ne demek istediğini şüpheliyim.
İnt için bir String yazmayı kastediyorsanız, kullanın Integer.valueOf("123")
.
Diğer Nesnelerin çoğunu int'e atamazsınız, çünkü int değerine sahip olmazlar. Örneğin, bir XmlDocument öğesinin int değeri yoktur.
Integer.valueOf("123")
tek ihtiyacınız bir ilkel yerine kullanmak ise Integer.parseInt("123")
çünkü valueOf yöntemi gereksiz bir unboxing neden olur.
Sanırım C veya C ++ 'ın neden bir nesne işaretçisini sayı gibi değiştirmenize izin verdiğini merak ediyorsunuz, ancak Java'da bir nesne referansını aynı şekilde değiştiremezsiniz.
Java nesne referansları C veya C işaretçiler gibi değildir ++ ... İşaretçiler temelde olan tamsayılar ve başka int gibi onları manipüle edebilir. Referanslar kasıtlı olarak daha somut bir soyutlamadır ve işaretçilerin yapabileceği şekilde manipüle edilemez.
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
Bu kod neden ArrayList
önemli olduğunu ve neden kullandığımızı gösterir. Basitçe döküm int
dan Object
. Yardımcı olabilir.
Örnek Nesne değişkeni için; hastaId
Object hastaId = session.getAttribute("hastaID");
Örneğin, bir nesneyi int'e atama,hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
Bu kodu inceleyin:
public class sample
{
public static void main(String[] args)
{
Object obj=new Object();
int a=10,b=0;
obj=a;
b=(int)obj;
System.out.println("Object="+obj+"\nB="+b);
}
}
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
Son olarak, belirtiminiz için en iyi uygulama bulundu.
public int tellMyNumber(Object any) {
return 42;
}
önce instanceof anahtar sözcüğünü kontrol edin. doğruysa, o zaman dökün.
Object
bir değilInteger
, emin senin senin döküm ne bekliyoruz değilim.