社区
Web 开发
帖子详情
一个Class能不能知道自己被谁(Class)创建实例?或在其某方法中直接获取调用此方法的Class的名称?
myy
2005-02-03 09:38:49
比如
class A
{
public void M(){
System.out.print(调用Class的类名);//打印 "B"
}
}
...
class B
{
...
A a=new A();
A.M();
...
}
...全文
385
34
打赏
收藏
一个Class能不能知道自己被谁(Class)创建实例?或在其某方法中直接获取调用此方法的Class的名称?
比如 class A { public void M(){ System.out.print(调用Class的类名);//打印 "B" } } ... class B { ... A a=new A(); A.M(); ... }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
myy
2005-02-21
打赏
举报
回复
我终于知道了!
看了下面这篇文章,唉,说什么好呢?!·#¥%……—*()
http://www.csdn.net/csdn/csdnClick.aspx?ad=FP_TA_Java_List&adurl=http%3a%2f%2fblog.csdn.net%2fbuaawhl%2farchive%2f2005%2f01%2f18%2f257653.aspx
这是例子(jdk1.4),在任何一个函数中调用,测试一下看看吧...
public static void printCaller(){
int i;
StackTraceElement stack[] = (new Throwable()).getStackTrace();
for (i=0; i < stack.length; i++) {
StackTraceElement ste=stack[i];
System.out.println(i+"--"+ste.getClassName());
System.out.println(i+"--"+ste.getMethodName());
System.out.println(i+"--"+ste.getFileName());
System.out.println(i+"--"+ste.getLineNumber());
}
}
binny
2005-02-15
打赏
举报
回复
感觉是不可以
不过变通一下,new 一个Exception
然后根据他的StackTrace应该就可以了吧
关注,
希望有更好的方法
Squall1009
2005-02-15
打赏
举报
回复
谁能用反射写个出来让大家看看吗?
hollysky
2005-02-15
打赏
举报
回复
当然是不可以!
EverythingMaster
2005-02-15
打赏
举报
回复
如果真的可以实现,用处还是有的,这样可以“透明”的跟踪函数或类的
运行时调用路线图,对于调试、分析程序提供很大方便。
-----------------------------------------------------------
我看这个根本就和调试之类的不相关。我如果都不知道我的类调用了什么方法,我还怎么调试?我还怎么分析程序?我既然知道了我调用了哪些方法,我为什么还要去管还有没有其他类也调用了这些方法呢?你写一个工具类,目的不就是要给别人使用的吗?为什么要在意是谁使用了这个工具类呢?这样做根本就没有任何意义。这个跟“ 这样可以“透明”的跟踪函数或类的运行时调用路线图 ”这样的说法简直毫无相关。不知道你从哪里想出来的什么所谓调用路线图的说法。
你可以想想:sun提供了这个多类供我们使用,它会在每个类里面记录究竟是哪些类对其进行了调用吗?
这样做不是有病是什么?
yingle2000
2005-02-15
打赏
举报
回复
StackTrace就能知道堆栈了,method的调用一目了然。
NTMDQUSI
2005-02-04
打赏
举报
回复
再强调一下:
A.M() 不能有参数,A的构造函数也没有参数!
A.M(this), new A(this)...之类的办法我都明白,不然我也不会提问了。
不寫清楚都不行,在A中添加方法
public void Func()
{
Class aClass = this.getClass();
System.out.println(aClass.getName());
}
或者
A()
{
Class aClass = this.getClass();
System.out.println(aClass.getName());
}
沒人非要你傳參數啊
myy
2005-02-04
打赏
举报
回复
zd
myy
2005-02-04
打赏
举报
回复
再强调一下:
A.M() 不能有参数,A的构造函数也没有参数!
A.M(this), new A(this)...之类的办法我都明白,不然我也不会提问了。
myy
2005-02-04
打赏
举报
回复
哎,说来说去,構造方法, 一般方法,都是要传参的。
A 对 调用它的类一无所知,不能传任何参数,行不行?
snbna
2005-02-04
打赏
举报
回复
:)
:)
NTMDQUSI
2005-02-04
打赏
举报
回复
在A類的方法中加入Class aClass = this.getClass();
構造方法也行 一般方法也行
這樣做就能得到當前類的信息
然後可以通過java.lang.Class類的方法獲得類的信息
比如aClass.getName()
myy
2005-02-04
打赏
举报
回复
谢谢 loveyousomuch(★Allen★) ,小弟很菜,研究ing ...
以梦为马
2005-02-04
打赏
举报
回复
up
lvyuanfang
2005-02-04
打赏
举报
回复
class A
{
public void M(){
//如果是B调用我 ,打印 "B" ,如果是C调用我,打印"C"
//问题在于如何判断是B还是C ????
System.out.print(...);
}
}
...
class B
{
...
A a=new A();
A.M();
...
}
...
class C
{
...
A a=new A();
A.M();
...
}
...
更改为
class A
{
public void M(Class class){
//如果是B调用我 ,打印 "B" ,如果是C调用我,打印"C"
//问题在于如何判断是B还是C ????
System.out.print(class.getName());
}
}
...
class B
{
...
Class class=this.getClass();
A a=new A();
A.M(class);
...
}
...
class C
{
...
Class class=this.getClass();
A a=new A();
A.M(class);
...
}
loveyousomuch
2005-02-04
打赏
举报
回复
楼主可以查一下反射类来实现
myy
2005-02-04
打赏
举报
回复
传参谁都会啊 ,我还可以直接传 String的名称呢,问题是不传参行不行?
我的目的是:
每当有类调用 A.M() 时,A.M() 就可以打印出调用者的相关信息,这样,就可以
跟踪A.M() 被调用的情况,而不必在所有调用A.M()的地方象下面这样写:
A a=new A();
A.M();
System.out.println("我是"+this.getClass().getName()+",刚刚调用了A.M()");
EverythingMaster
2005-02-04
打赏
举报
回复
类A应该这样设计:
class A {
public static ArrayList list = new ArrayList();
public A(Object obj) {
list.add(obj);
for (int i=0;i<list.size();i++){
System.out.println(list.index(i));
}
}
}
类B可以这样调用:
class B {
public void someMethod(){
new A(this);
}
}
只是一种想法,还没有测试。
cless
2005-02-04
打赏
举报
回复
楼上的方法可行,不过应该还可以改进一下,用this.getClass().getName()就可以得到楼主要的东西了吧。
jcw2016
2005-02-04
打赏
举报
回复
楼上的这个方法就是说,在调用A的方法时传一个参数告诉A:现在是我B在调用你的方法。这样就改变了楼主定义的接口。不过好象也只有这种方法了。
加载更多回复(14)
java练习题13.txt
java练习题
云南省移动应用大赛模板.zip
云南省移动应用大赛模板.zip
HTML5基于SSM校园微公益网站设计可升级SpringBoot源码.7z
前台技术框架采用Bootstrap,
一个
高度灵活的HTML5响应式框架,为用户提供了流畅的前端交互体验。程序开发环境支持多样化,无论是myEclipse、Eclipse还是Idea都能轻松应对,结合mysql数据库,确保了数据的高效处理与存储。后台架构则选用SSM组合——SpringMVC、Spring和Mybatis,这一组合以其稳定性和高效性而备受青睐。 校园公益信息关联系统采用b/s架构,实现用户信息、活动类型、公益活动、活动报名、捐款、捐款统计、留言和新闻信息的全面管理。系统分为前台学生端和后台管理员端,满足不同用户群体的需求。 管理员端功能丰富,包括学院管理、活动类型管理、公益活动管理、活动报名管理、捐款信息管理、管理员账号管理、密码修改、捐款统计管理、留言管理和新闻信息管理等。管理员能够灵活添加、修改、删除和查询各类信息,确保信息的准确性和时效性。同时,捐款统计功能以直观的统计图形式展现,为管理员提供决策支持。 学生端则专注于学生的日常需求,包括添加捐款信息、留言、报名活动以及密码修改等。学生可以轻松完成捐款操作,发表留言,查看并报名公益活动,随时修改个人密码,确保账
JavaWeb程序设计SSM框架选课系统开发大作业有数据库文
JavaWeb程序设计SSM框架选课系统开发大作业有数据库文
2023年存储芯片行业趋势与发展分析.pptx
行业分析报告
Web 开发
81,091
社区成员
341,719
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章