如何获取一个变量或者对象的类型以及名字?

愤怒的大闸蟹 2009-03-17 07:28:55
我在方法中声明了两个形参,来自于用户的输入以及系统的。因为这个方法是在内部调用,然后在软件最下方的状态栏中输出提示信息,所以如果出错的话,要很直观的告诉用户和开发者,你在什么地方输入的什么值或者参数有问题。


我看了一下文档,java中的反射能解决一个类中属性的类型以及名字问题。如果要获取的对象是像我刚才提到的形参(可能是基本数值String、int、short、boolean啥的,也可能是Vector、JList对象),比如方法1这样声明:
private void swapData(Vector v1,Vector v2)
{
...
}

以及以下这些情况:
private void compare(String s1,String s2)
{
...
}

private void compare(int src,int target)
{
...
}

private void compare(InputData data1,InputData data2)
{
...
}



我怎么才能获得传入的形参的名称(就是v1、v2、s1、s2、src、target、data1、data2这些东西)和类型呢?(Vector、String、int、InputData)
...全文
1303 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑夜无疆 2011-06-28
  • 打赏
  • 举报
回复
楼主啊,我觉得这个做学习还不错,现在我也碰到相同的问题
Gkilroy 2009-03-18
  • 打赏
  • 举报
回复
LZ有必要更改下需求,你的需求不合理
凛冽北风 2009-03-18
  • 打赏
  • 举报
回复
拿到局部变量的的类型有什么意义呢?出了方法执行块,局部变量就失去意义了!你还真不如把这个变量申明为全局变量的好!
dawn023 2009-03-18
  • 打赏
  • 举报
回复
可以封装一个对象,该对象中有一个type的字段,你只要维护一个常数列表就可以了。
ZangXT 2009-03-18
  • 打赏
  • 举报
回复
别考虑了,局部变量的名字编译后就没有了。
要把局部变量的名字弄到类文件中好像只能通过javac -g 来编译了,但不知道如何读出来。
愤怒的大闸蟹 2009-03-18
  • 打赏
  • 举报
回复
java.lang.reflect这个方法已经弄了,确实能实现获取方法内部的变量名称,这倒不是大问题。现在不是想要内部变量,是想要局部变量。
goodmrning 2009-03-18
  • 打赏
  • 举报
回复
帮顶一个!
wclszh 2009-03-18
  • 打赏
  • 举报
回复
路过,帮你顶
sunsea08 2009-03-18
  • 打赏
  • 举报
回复
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。

查看软件包 java.lang.reflect
qusic 2009-03-18
  • 打赏
  • 举报
回复
对于对象的成员是可以用反射来获取其定义时的字面名字,
但是对于方法的参数(局部变量),据我说知java标准API中
没有相应的类。
愤怒的大闸蟹 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 Gkilroy 的回复:]
LZ有必要更改下需求,你的需求不合理
[/Quote]


说得对,重新让他们改。
coolhty 2009-03-17
  • 打赏
  • 举报
回复
所有就出现了规范这一原则。。

一般写setter方法的时候参数名都是用field名字吧?
愤怒的大闸蟹 2009-03-17
  • 打赏
  • 举报
回复
以上代码不是很好使,以前版本的代码就是用的这个,每次的对象如果不同的话,都得手动添加判断,而且没有实例对象名字的获取方法,比如Vector v1,没有获取v1这个对象名字“v1”的方法。期待新的解决方案。
kingssman 2009-03-17
  • 打赏
  • 举报
回复
判断对象类型


public static void main(String args[]) {
//String var = "123";
int var = -120;
//TODO:判断数据类型
Object param = var;


if (param instanceof Integer) {
int value = ((Integer) param).intValue();
System.out.println("var ls Integer!");
System.out.println("var ls value ==" + value);
} else if (param instanceof String) {
String s = (String) param;
System.out.println("var ls String!");
System.out.println("var ls value ==" + s);
} else if (param instanceof Double) {
double d = ((Double) param).doubleValue();
System.out.println("var ls double!");
System.out.println("var ls value ==" + d);
} else if (param instanceof Float) {
float f = ((Float) param).floatValue();
System.out.println("var ls float!");
System.out.println("var ls value ==" + f);
} else if (param instanceof Long) {
long l = ((Long) param).longValue();
System.out.println("var ls long!");
System.out.println("var ls value ==" + l);

} else if (param instanceof Boolean) {
boolean b = ((Boolean) param).booleanValue();
System.out.println("var ls boolean!");
System.out.println("var ls value ==" + b);
} else if (param instanceof Date) {
Date d = (Date) param;
System.out.println("var ls Date!");
System.out.println("var ls value ==" + d);
}

//以上代码为获得Object的类型


}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧