ฉันจะส่ง Object ไปยัง int ใน java ได้อย่างไร?
intValue) สร้างตัวสร้างสำหรับ enum ของคุณที่ตั้งค่าให้intValueenum ค่าคงที่ของคุณเรียกใช้ตัวสร้างนั้นและเพิ่ม getter intValueสำหรับ จากนั้นแทนที่จะโทรหาผู้โทรเข้า
ฉันจะส่ง Object ไปยัง int ใน java ได้อย่างไร?
intValue) สร้างตัวสร้างสำหรับ enum ของคุณที่ตั้งค่าให้intValueenum ค่าคงที่ของคุณเรียกใช้ตัวสร้างนั้นและเพิ่ม getter intValueสำหรับ จากนั้นแทนที่จะโทรหาผู้โทรเข้า
คำตอบ:
หากคุณแน่ใจว่าวัตถุนี้เป็นInteger:
int i = (Integer) object;
หรือเริ่มจาก Java 7 คุณสามารถเขียน:
int i = (int) object;
ระวังก็สามารถโยนClassCastExceptionถ้าวัตถุของคุณไม่ได้เป็นIntegerและถ้าวัตถุของคุณNullPointerExceptionnull
วิธีนี้คุณคิดว่า Object ของคุณเป็นจำนวนเต็ม (int ที่ล้อมรอบ) และคุณยกเลิกการรวมเป็น int
intเป็นดั้งเดิมจึงไม่สามารถเก็บไว้เป็นObjectเพียงวิธีเดียวคือการมีintการพิจารณา / บรรจุกล่องเป็นเก็บไว้แล้วในฐานะที่เป็นIntegerObject
หากวัตถุของคุณคือStringคุณสามารถใช้Integer.valueOf()วิธีการแปลงเป็น int อย่างง่าย:
int i = Integer.valueOf((String) object);
มันสามารถขว้างNumberFormatExceptionถ้าวัตถุของคุณไม่ได้เป็นStringจำนวนเต็มเป็นเนื้อหา
ทรัพยากร:
ในหัวข้อเดียวกัน:
NullPointerExceptionจะเกิดขึ้นในช่วงแกะกล่องของIntegerเข้าint
สมมติว่าวัตถุเป็นIntegerวัตถุจากนั้นคุณสามารถทำสิ่งนี้:
int i = ((จำนวนเต็ม) obj) .intValue ();
หากวัตถุนั้นไม่ใช่Integerวัตถุคุณจะต้องตรวจจับชนิดและแปลงตามประเภทของวัตถุนั้น
intValueการ autoboxing จะเรียกใช้สำหรับคุณ
intValueมีความชัดเจนมากขึ้นโดยเฉพาะอย่างยิ่งเมื่อพิจารณาความสับสนระหว่างผู้เริ่มต้นกับintการใช้แทนกันIntegerได้
ถ้ามันรับประกันว่าวัตถุของคุณเป็นแบบIntegerนี้เป็นวิธีที่ง่าย:
int x = (Integer)yourObject;
ใน Java 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);
โปรดทราบว่านี่ไม่ใช่ค่าตัวชี้จริง ที่อยู่หน่วยความจำของวัตถุสามารถเปลี่ยนแปลงได้โดย JVM ในขณะที่การแฮชข้อมูลประจำตัวของพวกเขากำลังรักษา นอกจากนี้สองสิ่งมีชีวิตสามารถมีแฮชเอกลักษณ์เหมือนกัน
นอกจากนี้คุณยังสามารถใช้object.hashCode()แต่สามารถระบุประเภท
ในกรณีเดียวกันคุณต้องมีดัชนีที่ไม่ซ้ำกันสำหรับแต่ละวัตถุเช่นการเพิ่มค่า 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 enum ไม่ใช่จำนวนเต็ม แต่เป็นวัตถุเด่นเต็มรูปแบบ (ต่างจาก C / C ++ เป็นต้น) อาจไม่จำเป็นต้องแปลงอ็อบเจกต์ enum เป็นintแต่จาวาจะเชื่อมโยงหมายเลขดัชนีกับสมาชิก 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");
}
}
อย่างที่คุณเห็นนี่ไม่ใช่วิธีที่มีประสิทธิภาพมากในการทำเช่นนี้ คุณเพียงแค่ต้องแน่ใจว่าคุณมีวัตถุประเภทใด จากนั้นแปลงให้เป็นทางที่ถูกต้อง
คุณต้องส่งมันไปที่ Integer (คลาส wrapper ของ int) จากนั้นคุณสามารถใช้เมธอด intValue () ของ Integer เพื่อรับค่าอินทีภายใน
ตอบ:
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;
ทราบว่านี้จะทำงานเฉพาะเมื่อคุณกำลังใช้อย่างน้อย Java 1.5 กับAutoboxing คุณลักษณะมิฉะนั้นคุณต้องประกาศiเป็นIntegerแทนแล้วโทรintValue()กับมัน
แต่ถ้าในตอนแรกมันไม่ได้ถูกสร้างขึ้นมาเหมือนIntegerคุณก็ไม่สามารถทำแบบนั้นได้ มันจะส่งผลให้ClassCastExceptionกับชื่อคลาสเดิมในข้อความ หากการtoString()แสดงของวัตถุตามที่ได้รับโดยString#valueOf()แสดงจำนวนเต็มที่ถูกต้อง syntactically (เช่นตัวเลขเท่านั้นหากจำเป็นต้องมีเครื่องหมายลบหน้า) จากนั้นคุณสามารถใช้Integer#valueOf()หรือ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.
ไม่สามารถทำได้ An intไม่ใช่วัตถุมันเป็นชนิดดั้งเดิม คุณสามารถส่งให้ Integer จากนั้นรับค่าได้
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
คุณทำไม่ได้ ไม่ได้เป็นintObject
Integerเป็นObjectแต่ฉันสงสัยว่าเป็นสิ่งที่คุณหมายถึง
ถ้าคุณหมายถึงโยนเชือกเพื่อ int Integer.valueOf("123")ที่ใช้
คุณไม่สามารถใช้ออบเจ็กต์อื่น ๆ ส่วนใหญ่เพื่อ int ได้เนื่องจากพวกเขาจะไม่มีค่า int เช่น XmlDocument ไม่มีค่า int
Integer.valueOf("123")ถ้าทุกอย่างที่คุณต้องการนั้นเป็นแบบดั้งเดิมแทนที่จะใช้Integer.parseInt("123")เพราะเมธอดvalueOfทำให้การUnboxไม่จำเป็น
ฉันเดาว่าคุณสงสัยว่าทำไม C หรือ C ++ ช่วยให้คุณจัดการตัวชี้วัตถุเช่นตัวเลข แต่คุณไม่สามารถจัดการการอ้างอิงวัตถุใน Java ด้วยวิธีเดียวกัน
การอ้างอิงวัตถุใน Java ไม่เหมือนกับพอยน์เตอร์ใน C หรือ C ++ ... โดยทั่วไปพอยน์เตอร์จะเป็นจำนวนเต็มและคุณสามารถจัดการมันได้เหมือนกับ int อื่น ๆ การอ้างอิงนั้นเป็นนามธรรมที่เป็นรูปธรรมมากขึ้นและไม่สามารถปรับเปลี่ยนวิธีการที่ตัวชี้สามารถทำได้
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อาจเป็นประโยชน์
ตัวอย่างเช่นตัวแปรวัตถุ hastaId
Object hastaId = session.getAttribute("hastaID");
ยกตัวอย่างเช่นโยนวัตถุไปยัง inthastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
อ้างอิงรหัสนี้:
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;
ในที่สุดการใช้งานที่ดีที่สุดสำหรับข้อกำหนดของคุณก็พบว่า
public int tellMyNumber(Object any) {
return 42;
}
ตรวจสอบครั้งแรกด้วยคำหลักของอินสแตนซ์ ถ้าเป็นจริงแล้วโยนมัน
Objectไม่ใช่Integerฉันไม่แน่ใจว่าคุณคาดหวังอะไรจากนักแสดงของคุณ