Java中被调用的类中的方法如何获得原调用的类的对象

Java中被调用的类中的方法如何获得原调用的类的对象,第1张

可以通过“ThreadcurrentThread()getStackTrace()”,来获得当前调用堆栈。从而获得所需要的调用类及方法。

package demo;

public class Main {

public static void main(String[] args) {

//JFinalstart("webRoot", 8080, "/");

Main m = new Main();

ma1();

}

public void a1(){

new A()a();

}

}

class A{

public void a(){

new B()b();

}

}

class B{

public void b(){

new C()c();

}

}

class C{

public void c(){

StackTraceElement[] es = ThreadcurrentThread()getStackTrace();

for(StackTraceElement e : es){

Systemoutprintln(egetClassName());

}

}

}

运行结果:

如题:

如果是使用 判断来验证的话 可以 使用

instanceof 关键字来做比较。

在java中 instanceof 归类为 比较运算符(特殊的)

是用来 判断 某个 对象 是否是某个类的实例(所谓的实例 就是指,这个对象 是 由 这个类 或这个类的子类 new 出来的)

如: 你自己定义了一个类 Person类,而你用这个类new(创建) 了一个对象p ( Person p=new Person() ) ,则 这个 时候 boolean flag=p instanceof Person ;

的结果是 true;

注意 instanceof 左边的事对象,右边的事类名。

instanceof 关键字 的用法 基础的就是这样。

当然 如果 你比较的对象 不是 这个类 的实例,则结果当然是false了。

当时,此时 要注意了。

java中的类是可继承的。(在涉及到继承时候 用instanceof 就有意思了,要注意这里的情况)

如:

你写了 一个类 Student 继承了Person 类。

就像这样 class Student extends Person

那么 这个时候

Student 类的实例 如:Student stu=new Student();

此时 如果 你使用 stu instanceof Student ,那么 ,结果 当如是true的。

是吧?这个不会 有疑问吧? 有疑问 的话, 下面的就没法看了。

接着,再看这个:

Student stu1=new Student();

boolean result=stu1 instanceof Person;

那么 result 的结果 是true 还是 false呢?

结果是 true;

这 就是 在继承结构下,instanceof 要注意的地方。

我们 可以这样理解

Person p1=new Person();

p1 instanceof Person ---true ==>人(p1)是(Person)人类的 实例

Student stu2=new Student();

stu2 instanceof Student;---->true; ==>学生(stu2)是学生类(Student)的实例

stu2 instanceof Person --->true ==>学生也是人(继承结构)

补充 :

写的,不正确了。

应该写成

if(某变量 instanceof Integer){

//do some

}else if(某某变量 instanceof Float){

//do some

}

Integer 是int的包装类

Float 是float的包装类

不知 是不是你想要的答案。

/

  获取field的类型,如果是复合对象,获取的是泛型的类型

 

  @param field

  @return

 /

private static Class getFieldClass(Field field) {

    Class fieldClazz = fieldgetType();

    if (fieldClazzisAssignableFrom(Listclass)) {

        Type fc = fieldgetGenericType(); // 关键的地方,如果是List类型,得到其Generic的类型

        if (fc instanceof ParameterizedType) // 如果是泛型参数的类型

        {

            ParameterizedType pt = (ParameterizedType) fc;

            fieldClazz = (Class) ptgetActualTypeArguments()[0]; //得到泛型里的class类型对象。

        }

    }

    return fieldClazz;

}

正好这几天刚写了相关代码,供参考

你是指你的 web 项目中使用到一个工具性的类,它的形参中没有 >

如果是这样的话,我们需要使用一个 ThreadLocal 变量,我们把当前  request 的变量绑定到里面,在一个 request 请求的生命周期内我们在方法调用的各个更深的层次中都可以直接使用它而不需要在每个方法中都传递这个 request 参数,保存在某个地方就容易导致因为多个请求共用同一个实例而出问题,所有 context 相关的变量不保存在任何业务类相关并且可能被多线程共用的对象实例中才是保证不会出现线程安全问题的途径。

例如,这个例子中我们只要把 webxml 中配置好 ContextFilter 后它就会自动在请求开始时绑定一个 context,结束后自动销毁,在这中间的任何时刻我们都可以通过 MyWebContextgetCurrentContext() 得到我们的 >// MyWebContext 记录当前 Request 的所有 context 变量。因为 servlet 是一个请求绑定一个线程的,我们用 ThreadLocal 不会有线程安全问题。

 

class MyWebContext {

    private static final ThreadLocal contexts = new ThreadLocal();

     

    // 拿出当前线程绑定的 context

    public static MyWebContext getCurrentContext() {

        return (MyWebContext) contextsget();

    }

    public static MyWebContext createContext() {

        return new MyWebContext();

    }

     

    // 绑定一个 context 到当前线程 

    public static void setContext(MyWebContext context) {

        contextsset(context);

    }

    public static void clearContext() {

        contextsset(null);

    }

     

    private >

比如说你创建一个Person对象

Person对象里面有say();方法

创建对象非常简单  Person   p=new   Person();

user_026这个对象非常简单的就会获取

比如  User   user_026=new  User();

这样你就得到对象了

首先,向你确认你所谓的普通类就是POJO吗,如果是是无法获取Request对象的。

不过,可以使用参数传递的方式。

Request对象,即ServletRequest,隶属于javax包下的,需要实现其>

以上就是关于Java中被调用的类中的方法如何获得原调用的类的对象全部的内容,包括:Java中被调用的类中的方法如何获得原调用的类的对象、JAVA语言 获得对象类型、如何获取 java 的泛型中的对象类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9535480.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存