有没有一种办法可以返回定义的变量名称!

blackhost 2005-09-13 11:51:58
例如我
String a1="asdfasdf";
Integer a2=new Integer(10);

Object[] c=new Object[2];

c[0]=a1;
c[1]=a2;

然后我让c[0].getMethodXX()的出的值是我原线的定义的变量名称!

例如System.out.println(c[0].getMethodXX()),打印出"a1"
System.out.println(c[1].getMethodXX()),打印出"a2"

...全文
211 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
你是只猪啊 2005-09-15
  • 打赏
  • 举报
回复
可以试试Class类中的getFiled()或者getDeclaredFields()之类的方法。
blackhost 2005-09-15
  • 打赏
  • 举报
回复
目前我使用了Map方式来做的,但不知道还有没有其他更好的办法.
blackhost 2005-09-15
  • 打赏
  • 举报
回复
对于解释/编译器来说,并不关心你的变量到底是叫a1还是a2,它们只是在你实例化的时候为对象开辟一块内存空间而已,所谓的变量名只是方便阅读代码用的。何况你每次使用变量其实都是在引用它的内存地址,写代码时候的变量名早就已经被编译器的其他东西给取代了。所以没办法知道你的源代码里面的初始变量名是什么。

如果你确实有这个需求,只能是自己写一个接口,其他类都需要实现这个接口。

或者楼主应该把你想这么干的初衷说出来,也许这只是个钻了牛角尖的问题。
========================================

public Collection getCollection(String objName, Map params, int start,
int count) throws DAOException {
try {
// 组合检索语句
String strSQL = "from " + objName + " d";
if (params != null && !params.isEmpty()) {
strSQL = strSQL + " where ";
for (Iterator it = params.keySet().iterator(); it.hasNext();) {
String paramName = (String) it.next();
strSQL = strSQL + "d." + paramName + "=:" + paramName;
}
}

Query q = getHibernateTemplate().getSessionFactory()
.getCurrentSession().createQuery(strSQL);
if (params != null && !params.isEmpty()) {
for (Iterator it = params.keySet().iterator(); it.hasNext();) {
String paramName = (String) it.next();
q.setParameter(paramName, params.get(paramName));
}
}
q.setFirstResult(start);
q.setMaxResults(count);
return q.list();
} catch (HibernateException e) {
throw new DAOException(e.getMessage());
}
}
gogon 2005-09-15
  • 打赏
  • 举报
回复
java 对于一个对象,java能够找到持有这个对象的引用。
比如说String对象,当失去所有持有这个对象的引用,成为unreachable的时候,要么被引入reference,要么准备被gc回收。所以系统知道那些持有这个对象的引用,但是没有提供得到这些引用的函数。或者说我们不知道。
crazycy 2005-09-15
  • 打赏
  • 举报
回复
不可能通过反射机制得到变量的名称;

我原先也这么追求过;Map就不错的;
Willam2004 2005-09-14
  • 打赏
  • 举报
回复
路过,关注,觉得: icewolf_li(冰狼) 说的蛮有道理.
kingdoom 2005-09-13
  • 打赏
  • 举报
回复
看来JDK里面没有类似的方法可以得到定义的变量名.
为每一种类型都去定义一个或者重写一个方法,不现实.也违背了我的初衷.

不知道楼主得初衷是什么
反射是可以得到变量名得,但是不能得到他得值
你可以象反射BEAN一样 反射他变量名来组成他GET/SET方法
LuckyBall 2005-09-13
  • 打赏
  • 举报
回复
理解错误,确实只能使用关联数组
<script>
aSample={"a":"aaa","b":"bbb","c":"ccc"}
for(key in aSample){
document.write(key+":"+aSample[key]+"<br>")
}
</script>
LuckyBall 2005-09-13
  • 打赏
  • 举报
回复
理解错误,确实只能使用关联数组

<script>
aSample={"a":"aaa","b":"bbb","c":"ccc"}
for(key in aSample){
document.write(key+":"+aSample[key]+"<br>")
}
</script>
blackhost 2005-09-13
  • 打赏
  • 举报
回复
看来JDK里面没有类似的方法可以得到定义的变量名.
为每一种类型都去定义一个或者重写一个方法,不现实.也违背了我的初衷.
superslash 2005-09-13
  • 打赏
  • 举报
回复
Map就ok le
LuckyBall 2005-09-13
  • 打赏
  • 举报
回复
哦,理解错了楼主的意思,应该是:
public class AAA {

private String aa = "测试结果";

public String getMethod() {
return "aa";
}

}

public class Test {

public static void main(String[] args) {
AAA a1= new AAA();
Integer a2=new Integer(10);

Object[] c=new Object[2];

c[0]=a1;
c[1]=a2;

System.out.println(a1.getMethod());//输出的结果为“aa”
}
}

interhanchi 2005-09-13
  • 打赏
  • 举报
回复
可以用map.
LuckyBall 2005-09-13
  • 打赏
  • 举报
回复
String怎么会有getMethodsXX()方法?
如果a1真是复杂对象,结果也不对,例如:
public class AAA {

private String aa = "测试结果";

public String getAa() {
return aa;
}
public void setAa(String string) {
aa = string;
}
}

public class Test {

public static void main(String[] args) {
AAA a1= new AAA();
Integer a2=new Integer(10);

Object[] c=new Object[2];

c[0]=a1;
c[1]=a2;

System.out.println(a1.getAa());//输出的结果为“测试结果”
}
}
Dan1980 2005-09-13
  • 打赏
  • 举报
回复
不能, 可以用关联数组, 如Map
icewolf_li 2005-09-13
  • 打赏
  • 举报
回复
对于解释/编译器来说,并不关心你的变量到底是叫a1还是a2,它们只是在你实例化的时候为对象开辟一块内存空间而已,所谓的变量名只是方便阅读代码用的。何况你每次使用变量其实都是在引用它的内存地址,写代码时候的变量名早就已经被编译器的其他东西给取代了。所以没办法知道你的源代码里面的初始变量名是什么。

如果你确实有这个需求,只能是自己写一个接口,其他类都需要实现这个接口。

或者楼主应该把你想这么干的初衷说出来,也许这只是个钻了牛角尖的问题。

62,614

社区成员

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

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