如何检查以确保我的变量是int,array,double等...?
编辑:例如,如何检查变量是否为数组?有一些功能可以做到这一点吗?
如何检查以确保我的变量是int,array,double等...?
编辑:例如,如何检查变量是否为数组?有一些功能可以做到这一点吗?
Answers:
Java是一种静态类型的语言,因此编译器会为您执行大部分检查。一旦将变量声明为某种类型,编译器将确保仅为其分配该类型的值(或作为该类型的子类型的值)。
您为(int,array,double)提供的示例都是基元,并且它们没有子类型。因此,如果您将变量声明为int:
int x;
您可以确定它只会保存int值。
List但是,如果您将变量声明为,则该变量可能会包含的子类型List。这些的实例包括ArrayList,LinkedList等
如果您确实有一个List变量,并且需要知道它是否是一个ArrayList,则可以执行以下操作:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
但是,如果您发现自己需要这样做,则可能需要重新考虑您的方法。在大多数情况下,如果遵循面向对象的原则,则不需要这样做。当然,每个规则都有例外。
实际上,通过滥用Java的方法重载能力,很容易推出自己的测试器。尽管我仍然对sdk中是否有官方方法感到好奇。
例:
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");
}
}
然后:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()-将为您提供所引用的实际对象a的数据类型,而不是变量a最初被声明为或随后强制转换为的数据类型。
boolean b = a instanceof String-将告诉您所引用的实际对象是否a是特定类的实例。同样,变量a最初声明为或随后转换为的数据类型与instanceof运算符的结果无关。
我从以下信息中获取了信息: 您如何知道Java中的变量类型?
这可能发生。我正在尝试将a解析String为一个int,我想Integer.parseInt(s.substring(a, b))在总结之前先知道我是在踢int还是垃圾。
顺便说一下,这就是反射。这是有关此主题的更多信息:http : //docs.oracle.com/javase/tutorial/reflect/
您可以使用Integer(而不是int),Double(而不是double)等(此类适用于所有基本类型)。然后,您可以使用运算符instanceof,例如if(var instanceof Integer){...}
好吧,我认为可以通过这种方式检查变量的类型。
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! ");
}
这样,您不必具有多个重载方法。我认为,由于增加了好处,因此最好在数组上使用集合。话虽如此,我不知道如何检查数组类型。也许有人可以改善此解决方案。希望这可以帮助!
PS是的,我知道这也不会检查原语。
我用以下方法做到了: if(x.getClass() == MyClass.class){...}
我对这些答案都不满意,正确的答案没有解释,但票数不佳,因此我四处搜寻,查找并编辑了一些内容,以便于理解。试一试,不像人们希望的那样直接。
//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);
这是一个方法:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
如果变量是未初始化的泛型类型,则这些答案均无效
从我发现的情况来看,只有使用极为丑陋的解决方法,或者将初始化参数传递给函数,使其就位,才有可能,请参见此处:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
无效,因为您不能T直接从参数中拉出类型,因为它在运行时会被删除。
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
之所以可行,是因为调用者负责out在调用之前实例化变量。如果在调用时out为null,这仍将引发异常,但是与链接的解决方案相比,这是迄今为止最简单的方法
我知道这是一种特定的应用程序,但是由于这是google上第一个使用java查找变量类型的结果(鉴于这T是一种变量),我认为应该将其包括在内
Java.lang.Class.getSimpleName()如果变量具有非基本类型,则可以使用“ 方法仅” 轻松检查它。它不适用于基本类型int,long等。
参考- 这是Oracle文档链接
基本上,例如:
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
}
}