Làm thế nào tôi có thể truyền một Object cho một int trong java?
intValue
), tạo một hàm tạo cho enum của bạn để đặt intValue
, các hằng số enum của bạn gọi hàm tạo đó và thêm một hàm cho intValue
. Sau đó, thay vì đúc, hãy gọi getter.
Làm thế nào tôi có thể truyền một Object cho một int trong java?
intValue
), tạo một hàm tạo cho enum của bạn để đặt intValue
, các hằng số enum của bạn gọi hàm tạo đó và thêm một hàm cho intValue
. Sau đó, thay vì đúc, hãy gọi getter.
Câu trả lời:
Nếu bạn chắc chắn rằng đối tượng này là Integer
:
int i = (Integer) object;
Hoặc, bắt đầu từ Java 7, bạn có thể viết tương đương:
int i = (int) object;
Coi chừng, nó có thể ném ClassCastException
nếu đối tượng của bạn không phải là Integer
và NullPointerException
nếu đối tượng của bạn là null
.
Bằng cách này, bạn cho rằng Object của bạn là một Integer (int được bao bọc) và bạn mở hộp nó thành int.
int
là một nguyên thủy vì vậy nó không thể được lưu trữ dưới dạng Object
, cách duy nhất là int
xem xét / đóng hộp dưới dạng Integer
lưu trữ dưới dạng Object
.
Nếu đối tượng của bạn là a String
, thì bạn có thể sử dụng Integer.valueOf()
phương thức để chuyển đổi nó thành một int đơn giản:
int i = Integer.valueOf((String) object);
Nó có thể ném NumberFormatException
nếu đối tượng của bạn không thực sự là String
một số nguyên dưới dạng nội dung.
Tài nguyên :
Cùng chủ đề:
NullPointerException
chí sẽ xảy ra trong quá trình mở hộp Integer
vàoint
Giả sử đối tượng là một Integer
đối tượng, thì bạn có thể làm điều này:
int i = ((Số nguyên) obj) .intValue ();
Nếu đối tượng không phải là một Integer
đối tượng, thì bạn phải phát hiện loại và chuyển đổi nó dựa trên loại của nó.
intValue
cho autoboxing sẽ gọi nó cho bạn.
intValue
rõ ràng hơn nhiều đặc biệt là xem xét sự nhầm lẫn giữa người mới bắt đầu giữa int
việc có thể hoán đổi cho nhau Integer
.
Nếu nó đảm bảo rằng đối tượng của bạn là một Integer
, đây là cách đơn giản:
int x = (Integer)yourObject;
Trong Java Integer
, Long
, BigInteger
vv tất cả thực hiện các Number
giao diện trong đó có một phương thức có tên intValue
. Bất kỳ loại tùy chỉnh nào khác có khía cạnh số cũng nên triển khai Number
(ví dụ Age implements Number
:). Vì vậy, bạn có thể:
int x = ((Number)yourObject).intValue();
Khi bạn chấp nhận đầu vào của người dùng từ dòng lệnh (hoặc trường văn bản, v.v.), bạn sẽ nhận được dưới dạng a String
. Trong trường hợp này, bạn có thể sử dụng Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Nếu bạn nhận được đầu vào là Object
, bạn có thể sử dụng (String)input
hoặc, nếu nó có thể có một loại văn bản khác , input.toString()
:
int x = Integer.parseInt(input.toString());
Trong Java không có con trỏ. Tuy nhiên, Object
có một triển khai mặc định giống như con trỏ hashCode()
, được cung cấp trực tiếp qua System.identityHashCode(Object o)
. Vì vậy, bạn có thể:
int x = System.identityHashCode(yourObject);
Lưu ý rằng đây không phải là một giá trị con trỏ thực sự. Địa chỉ bộ nhớ của các đối tượng có thể được JVM thay đổi trong khi băm nhận dạng của chúng đang giữ. Ngoài ra, hai đối tượng sống có thể có cùng hàm băm.
Bạn cũng có thể sử dụng object.hashCode()
, nhưng nó có thể là loại cụ thể.
Trong cùng một trường hợp, bạn cần một chỉ mục duy nhất cho từng đối tượng, muốn tự động tăng các giá trị ID trong bảng cơ sở dữ liệu (và không giống như băm nhận dạng không phải là duy nhất). Một triển khai mẫu đơn giản cho việc này:
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;
}
}
}
Sử dụng:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Trong Java enum, các thành viên không phải là số nguyên mà là các đối tượng đầy đủ tính năng (không giống như C / C ++ chẳng hạn). Có lẽ không bao giờ cần phải chuyển đổi một đối tượng enum thành int
, tuy nhiên Java sẽ tự động liên kết một số chỉ mục cho mỗi thành viên enum. Chỉ số này có thể được truy cập thông qua Enum.ordinal()
, ví dụ:
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");
}
}
Như bạn có thể thấy, đây không phải là cách làm rất hiệu quả. Bạn chỉ cần chắc chắn về loại đối tượng bạn có. Sau đó chuyển đổi nó thành một cách đúng.
Bạn phải truyền nó tới một Integer (lớp bao bọc của int). Sau đó, bạn có thể sử dụng phương thức intValue () của Integer để lấy int bên trong.
Câu trả lời:
int i = ( Integer ) yourObject;
Nếu, đối tượng của bạn là một số nguyên, nó sẽ chạy trơn tru. I E:
Object yourObject = 1;
// cast here
hoặc là
Object yourObject = new Integer(1);
// cast here
Vân vân.
Nếu đối tượng của bạn là bất cứ điều gì khác, bạn sẽ cần phải chuyển đổi nó (nếu có thể) thành int trước:
String s = "1";
Object yourObject = Integer.parseInt(s);
// cast here
Hoặc là
String s = "1";
Object yourObject = Integer.valueOf( s );
// cast here
Tôi sử dụng một lớp lót khi xử lý dữ liệu từ GSON:
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
Nếu Object
ban đầu được khởi tạo là một Integer
, thì bạn có thể hạ thấp nó xuống một int
toán tử cast (Subtype)
.
Object object = new Integer(10);
int i = (Integer) object;
Lưu ý rằng điều này chỉ hoạt động khi bạn đang sử dụng ít nhất Java 1.5 với tính năng autoboxing , nếu không bạn phải khai báo i
như Integer
thay vào đó và sau đó gọi intValue()
vào nó .
Nhưng nếu ban đầu nó không được tạo ra như vậy Integer
, thì bạn không thể thất vọng như thế. Nó sẽ dẫn đến một ClassCastException
tên lớp gốc trong tin nhắn. Nếu toString()
biểu diễn của đối tượng thu được bằng cách String#valueOf()
biểu thị một số nguyên hợp lệ về mặt cú pháp (ví dụ: chỉ các chữ số, nếu cần thiết có dấu trừ ở phía trước), thì bạn có thể sử dụng Integer#valueOf()
hoặc new Integer()
cho điều này.
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.
Không thể được thực hiện. An int
không phải là một đối tượng, nó là một kiểu nguyên thủy. Bạn có thể truyền nó tới Integer, sau đó lấy int.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Bạn không thể. An int
không phải là một Object
.
Integer
là một Object
mặc dù, nhưng tôi nghi ngờ đó là những gì bạn có ý nghĩa.
Nếu bạn muốn truyền String thành int, hãy sử dụng Integer.valueOf("123")
.
Mặc dù vậy, bạn không thể sử dụng hầu hết các Đối tượng khác cho int, vì chúng không có giá trị int. Ví dụ: XmlDocument không có giá trị int.
Integer.valueOf("123")
nếu tất cả những gì bạn cần là nguyên thủy thay vì sử dụng Integer.parseInt("123")
vì phương thức valueOf gây ra việc bỏ hộp không cần thiết.
Tôi đoán bạn đang tự hỏi tại sao C hoặc C ++ cho phép bạn thao tác một con trỏ đối tượng như một số, nhưng bạn không thể thao tác một tham chiếu đối tượng trong Java theo cùng một cách.
Các tham chiếu đối tượng trong Java không giống như các con trỏ trong C hoặc C ++ ... Các con trỏ về cơ bản là các số nguyên và bạn có thể thao tác chúng như bất kỳ int nào khác. Các tài liệu tham khảo có chủ ý là một sự trừu tượng cụ thể hơn và không thể bị thao túng theo cách con trỏ có thể.
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
Mã này cho thấy tại sao ArrayList
quan trọng và tại sao chúng ta sử dụng nó. Đơn giản chỉ cần đúc int
từ Object
. Có thể là hữu ích của nó.
Ví dụ biến đối tượng; hastaId
Object hastaId = session.getAttribute("hastaID");
Ví dụ: Truyền đối tượng cho một int,hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
Tham khảo mã này:
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;
Cuối cùng, việc thực hiện tốt nhất cho đặc điểm kỹ thuật của bạn đã được tìm thấy.
public int tellMyNumber(Object any) {
return 42;
}
kiểm tra đầu tiên với từ khóa instanceof. nếu đúng thì đúc nó.
Object
không phải là mộtInteger
, tôi không chắc những gì bạn đang mong đợi từ dàn diễn viên của bạn.