假设我声明了一个变量:
String a = "test";
我想知道它是什么类型,即输出应该是java.lang.String
我该怎么做?
Object o = "o";
-变量的类型是Object,值的类型是String。
List<String> l = new ArrayList<String>();
,变量List<String>
的类型为,值的类型为ArrayList<String>
。
假设我声明了一个变量:
String a = "test";
我想知道它是什么类型,即输出应该是java.lang.String
我该怎么做?
Object o = "o";
-变量的类型是Object,值的类型是String。
List<String> l = new ArrayList<String>();
,变量List<String>
的类型为,值的类型为ArrayList<String>
。
Answers:
a.getClass().getName()
a
在编译时很明显就声明了
int
值的方法是在int
变量中,因此无法编写处理int
值且不知道该类型的代码。如果您要处理类似的包装Integer
,问题就不同了,但是此答案的代码再次起作用。
如果需要名称,请使用马丁的方法。如果您想知道它是否是某个类的实例:
boolean b = a instanceof String
Double a = 1d; boolean b = a instanceof String;
将导致错误error: incompatible types: Double cannot be converted to String
我想在此扩展马丁的答案...
他的解决方案相当不错,但是可以对其进行调整,以便可以像这样打印任何“变量类型”。(实际上是“值类型”,更多内容请参见主题)。也就是说,“调整”可能是一个有力的词。无论如何,这可能会有所帮助。
马丁斯解决方案:
a.getClass().getName()
但是,如果您希望它可以与任何东西一起使用,则可以执行以下操作:
((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()
在这种情况下,图元将简单地包装在包装器中。在这种情况下,您将获得图元的对象。
我自己这样使用它:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
使用泛型:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
我同意Joachim Sauer所说的,除非变量是类属性,否则不知道(变量类型!不是值类型!)(您将必须检索类字段,并按名称获取正确的字段...)。
实际上,对我而言,任何a.xxx().yyy()
方法都不可能为您提供正确的答案,因为根据调用此方法的上下文,在完全相同的对象上答案是不同的...
正如teehoo所说,如果您知道在编译定义的类型列表以进行测试时,可以使用instanceof,但是您还将获得返回true的子类。
一种可能的解决方案是从的实现中激发自己,java.lang.reflect.Field
并创建自己的Field
类,然后将所有局部变量声明为此自定义Field
实现...,但是最好找到另一种解决方案,我真的很想知道为什么需要变量类型,而不仅仅是值类型?
使用Java的运算符重载功能
class Test {
void printType(String x) {
System.out.print("String");
}
void printType(int x) {
System.out.print("Int");
}
// same goes on with boolean,double,float,object ...
}
我认为我们在这里有多种解决方案:
为什么?在Java中,每个类都是从Object类本身继承的。因此,如果您有一个变量,并且想知道其类型。您可以使用
要么
要么
isPrimitive()
public static void main(String[] args) {
ClassDemo classOne = new ClassDemo();
Class classOneClass = classOne();
int i = 5;
Class iClass = int.class;
// checking for primitive type
boolean retval1 = classOneClass.isPrimitive();
System.out.println("classOneClass is primitive type? = " + retval1);
// checking for primitive type?
boolean retval2 = iClass.isPrimitive();
System.out.println("iClass is primitive type? = " + retval2);
}
这将给我们:
点击这里了解更多: 如何确定原始类型原始变量?
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html