pka*_*ing 97
Java是一种静态类型语言,因此编译器会为您完成大部分检查.一旦将变量声明为某种类型,编译器将确保只为该类型赋值(或者是该类型的子类型的值).
您给出的示例(int,array,double)这些都是基元,并且没有它们的子类型.因此,如果您将变量声明为int
:
int x;
Run Code Online (Sandbox Code Playgroud)
你可以肯定它只会持有double
价值.
int
但是,如果将变量声明为a ,则变量可能包含子类型int
.这些的实例包括List
,List
等
如果您确实有ArrayList
变量,并且需要知道它是否为变量,则LinkedList
可以执行以下操作:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您发现自己认为需要这样做,则可能需要重新考虑自己的方法.在大多数情况下,如果您遵循面向对象的主体,则不需要执行此操作.当然,每条规则都有例外.
小智 36
实际上很容易通过滥用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");
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
Typetester t = new Typetester();
t.printType( yourVariable );
Run Code Online (Sandbox Code Playgroud)
Gle*_*rce 21
a.getClass().getName()
- 将为您提供所引用的实际对象a
的数据类型,但不提供该变量a
最初声明或随后转换为的数据类型.
boolean b = a instanceof String
- 将告诉您所引用的实际对象是否a
是特定类的实例.同样,变量a
最初声明或随后转换为的数据类型与instanceof运算符的结果无关.
我从以下信息中获取了这些信息: 您如何知道java中的变量类型?
这可能发生.我正在尝试解析一个String
int并且我想知道Integer.parseInt(s.substring(a, b))
在我尝试总结之前我是在踢出一个int还是垃圾.
顺便说一句,这被称为反射.以下是有关该主题的更多信息:http://docs.oracle.com/javase/tutorial/reflect/
Ale*_*rov 13
您可以使用Integer而不是int,Double而不是double等(这些类适用于所有基本类型).然后你可以使用运算符instanceof,就像if(var instanceof Integer){...}
小智 10
只需使用:
.getClass().getSimpleName();
Run Code Online (Sandbox Code Playgroud)
例:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Run Code Online (Sandbox Code Playgroud)
输出:
StringBuilder
Run Code Online (Sandbox Code Playgroud)
小智 8
好吧,我认为检查变量的类型可以这样做.
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! ");
}
Run Code Online (Sandbox Code Playgroud)
这样您就不需要多个重载方法.我认为由于额外的好处,使用集合而不是阵列是一种好习惯.话虽如此,我不知道如何检查数组类型.也许有人可以改进这个解决方案 希望这可以帮助!
PS是的,我知道这也不会检查原语.
你问题的第一部分毫无意义.在编译时,您不会知道原始变量的类型.
在第二部分中,唯一没有知道变量是否是数组的情况是它是否是一个Object.在哪种情况下object.getClass().isArray()
会告诉你.
归档时间: |
|
查看次数: |
356314 次 |
最近记录: |