Làm cách nào tôi có thể kiểm tra để đảm bảo rằng biến của tôi là int, array, double, v.v.?
Chỉnh sửa: Ví dụ: làm cách nào để kiểm tra xem một biến có phải là một mảng không? Có một số chức năng để làm điều này?
Làm cách nào tôi có thể kiểm tra để đảm bảo rằng biến của tôi là int, array, double, v.v.?
Chỉnh sửa: Ví dụ: làm cách nào để kiểm tra xem một biến có phải là một mảng không? Có một số chức năng để làm điều này?
Câu trả lời:
Java là một ngôn ngữ được định kiểu tĩnh, vì vậy trình biên dịch thực hiện hầu hết việc kiểm tra này cho bạn. Khi bạn khai báo một biến là một kiểu nhất định, trình biên dịch sẽ đảm bảo rằng biến đó chỉ được gán các giá trị của kiểu đó (hoặc các giá trị là kiểu con của kiểu đó).
Các ví dụ bạn đã đưa ra ( int, mảng, double) đây đều là các ví dụ nguyên thủy và không có kiểu con nào của chúng. Do đó, nếu bạn khai báo một biến là int:
int x;
Bạn có thể chắc chắn rằng nó sẽ chỉ giữ intgiá trị.
ListTuy nhiên, nếu bạn đã khai báo một biến là a , thì có thể biến đó sẽ chứa các kiểu con của List. Ví dụ về các bao gồm ArrayList, LinkedListvv
Nếu bạn đã có một Listbiến và bạn cần biết nó có phải là một biến hay không ArrayList, bạn có thể làm như sau:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
Tuy nhiên, nếu bạn nghĩ rằng bạn cần phải làm điều đó, bạn có thể muốn suy nghĩ lại cách tiếp cận của mình. Trong hầu hết các trường hợp, nếu bạn tuân theo nguyên tắc hướng đối tượng, bạn sẽ không cần phải làm điều này. Tất nhiên, có những ngoại lệ cho mọi quy tắc.
Trên thực tế, khá dễ dàng để cuộn trình thử nghiệm của riêng bạn, bằng cách lạm dụng khả năng quá tải phương thức của Java. Mặc dù tôi vẫn tò mò nếu có một phương thức chính thức trong sdk.
Thí dụ:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
sau đó:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()- sẽ cung cấp cho bạn kiểu dữ liệu của đối tượng thực được tham chiếu đến a, nhưng không phải kiểu dữ liệu mà biến ađược khai báo ban đầu hoặc sau đó được truyền đến.
boolean b = a instanceof String- sẽ cho bạn biết đối tượng thực được tham chiếu có phải alà một thể hiện của một lớp cụ thể hay không. Một lần nữa, kiểu dữ liệu mà biến ađược khai báo ban đầu hoặc sau đó được ép kiểu không liên quan đến kết quả của toán tử instanceof.
Tôi lấy thông tin này từ: Làm thế nào để bạn biết một kiểu biến trong java?
Điều này có thể xảy ra. Tôi đang cố gắng phân tích cú pháp a Stringthành một int và tôi muốn biết liệu của tôi Integer.parseInt(s.substring(a, b))đang loại bỏ một int hay rác trước khi tôi cố gắng tổng hợp nó.
Nhân tiện, điều này được gọi là Reflection. Dưới đây là một số thông tin thêm về chủ đề này: http://docs.oracle.com/javase/tutorial/reflect/
Bạn có thể làm việc với Integer thay vì int, Double thay vì double, v.v. (các lớp như vậy tồn tại cho tất cả các kiểu nguyên thủy). Sau đó, bạn có thể sử dụng instanceof của toán tử, nhưif(var instanceof Integer){...}
Chỉ dùng:
.getClass().getSimpleName();
Thí dụ:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Đầu ra:
StringBuilder
randSBgiữ NULL.
Tôi nghĩ rằng việc kiểm tra loại biến có thể được thực hiện theo cách này.
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
Bằng cách này, bạn không cần có nhiều phương thức quá tải. Tôi nghĩ rằng việc sử dụng các bộ sưu tập trên các mảng là cách tốt do các lợi ích bổ sung. Phải nói rằng, tôi không biết làm thế nào để kiểm tra một kiểu mảng. Có lẽ ai đó có thể cải thiện giải pháp này. Hi vọng điêu nay co ich!
Tái bút Có, tôi biết rằng điều này cũng không kiểm tra các nguyên thủy.
Phần đầu tiên của câu hỏi của bạn là vô nghĩa. Không có trường hợp nào mà bạn không biết loại biến nguyên thủy tại thời điểm biên dịch.
Ở phần thứ hai, trường hợp duy nhất mà bạn không biết liệu một biến có phải là một mảng hay không nếu nó là một Đối tượng. Trường hợp nào object.getClass().isArray()sẽ cho bạn biết.
Tôi đã làm điều đó bằng cách sử dụng: if(x.getClass() == MyClass.class){...}
Tôi không hài lòng với bất kỳ câu trả lời nào trong số này và câu trả lời đúng không có lời giải thích và số phiếu tiêu cực nên tôi đã tìm kiếm xung quanh, tìm một số nội dung và chỉnh sửa nó sao cho dễ hiểu. Hãy chơi với nó, không phải thẳng tiến như người ta mong đợi.
//move your variable into an Object type
Object obj=whatYouAreChecking;
System.out.println(obj);
// moving the class type into a Class variable
Class cls=obj.getClass();
System.out.println(cls);
// convert that Class Variable to a neat String
String answer = cls.getSimpleName();
System.out.println(answer);
Đây là một phương pháp:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
Không có câu trả lời nào trong số những câu trả lời này hoạt động nếu biến là loại chung chưa được khởi tạo
Và từ những gì tôi có thể tìm thấy, chỉ có thể bằng cách sử dụng một cách giải quyết cực kỳ xấu xí hoặc bằng cách chuyển một tham số đã khởi tạo vào hàm của bạn, làm cho nó đúng vị trí, xem tại đây:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
KHÔNG hợp lệ vì bạn không thể kéo Ttrực tiếp loại ra khỏi tham số, vì nó sẽ bị xóa trong thời gian chạy.
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
Điều này hoạt động vì người gọi có trách nhiệm khởi tạo biến outtrước khi gọi. Điều này vẫn sẽ ném ra một ngoại lệ nếu out là null khi được gọi, nhưng so với giải pháp được liên kết, đây là cách dễ nhất để thực hiện điều này
Tôi biết đây là một loại ứng dụng cụ thể, nhưng vì đây là kết quả đầu tiên trên google để tìm loại biến với java (và cho rằng đó Tlà một loại biến), tôi cảm thấy nó nên được đưa vào
Bạn có thể kiểm tra nó dễ dàng bằng cách sử dụng Java.lang.Class.getSimpleName() Method Only nếu biến có kiểu không nguyên thủy. Nó không hoạt động với các kiểu nguyên thủy int, long, v.v.
tham khảo - Đây là liên kết tài liệu Oracle
Về cơ bản, Ví dụ:
public class Kerem
{
public static void main(String[] args)
{
short x = 10;
short y = 3;
Object o = y;
System.out.println(o.getClass()); // java.lang.Short
}
}