ฉันจะส่ง Object ไปยัง int ใน java ได้อย่างไร?
intValue
) สร้างตัวสร้างสำหรับ enum ของคุณที่ตั้งค่าให้intValue
enum ค่าคงที่ของคุณเรียกใช้ตัวสร้างนั้นและเพิ่ม getter intValue
สำหรับ จากนั้นแทนที่จะโทรหาผู้โทรเข้า
ฉันจะส่ง Object ไปยัง int ใน java ได้อย่างไร?
intValue
) สร้างตัวสร้างสำหรับ enum ของคุณที่ตั้งค่าให้intValue
enum ค่าคงที่ของคุณเรียกใช้ตัวสร้างนั้นและเพิ่ม getter intValue
สำหรับ จากนั้นแทนที่จะโทรหาผู้โทรเข้า
คำตอบ:
หากคุณแน่ใจว่าวัตถุนี้เป็นInteger
:
int i = (Integer) object;
หรือเริ่มจาก Java 7 คุณสามารถเขียน:
int i = (int) object;
ระวังก็สามารถโยนClassCastException
ถ้าวัตถุของคุณไม่ได้เป็นInteger
และถ้าวัตถุของคุณNullPointerException
null
วิธีนี้คุณคิดว่า Object ของคุณเป็นจำนวนเต็ม (int ที่ล้อมรอบ) และคุณยกเลิกการรวมเป็น int
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
การ 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
คุณทำไม่ได้ ไม่ได้เป็นint
Object
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
ฉันไม่แน่ใจว่าคุณคาดหวังอะไรจากนักแสดงของคุณ