当前位置: 首页 > 面试题库 >

检索方法或构造函数的调用者实例(不是类)

韩弘阔
2023-03-14
问题内容

是否可以检索方法/构造函数的调用者实例?

该问题已经发布,但是每次答案都在谈论调用方类(使用stacktrace)而不是调用方实例时。如果存在解决方案,则可以很方便地构建对象图(具有常见的超级类型)并使用默认构造函数处理父级子级导航。

public class TestCallStack {
    public static class BaseClass {
        BaseClass owner;
//      //ok, this is the correct way to do it
//      public BaseClass(BaseClass owner) {
//          this.owner = owner;
//      }
        public BaseClass() {
            //this.owner = ???????; 
        }
    }
    public static class Parent extends BaseClass {
        Child child = new Child();
    }
    public static class Child extends BaseClass {
    }

    public static void main(String[] args) {
        Parent parent = new Parent();
        System.out.println(parent.child.owner==parent); // must be true
    }
}

问题答案:

您的直觉是正确的-这是不可能的。我个人认为这是一个 很好的 事情,因为它会导致代码相对于重构非常脆弱的(想象一下,拉一些代码伸到一个静态方法-
突然有一个在所有无来电显示的对象)。

如果要表达某种所有者关系,则应明确提供该所有者。



 类似资料:
  • 问题内容: 对不起任何较小的语法错误或其他错误,我正在使用Jitsi模块进行此操作,并且对Java不太熟悉,因此想确认正在发生的事情以及为什么以及如何对其进行修复。 使用按名称加载类方法创建类B的实例时,应用程序正在执行此操作: 在类B中调用重写的load() 初始化变量(根据调试器调用“私有字符串testString = null”),将其无效。 这是预期的Java行为吗?是什么原因造成的?它是

  • 我学到了两件事: -操作符创建一个新实例,然后执行声明的connstuctor来初始化该新实例 根据我的理解,这些说法互相反对。 例如,不会创建两个实例,因为-操作符创建一个实例,构造函数调用并创建另一个实例?当然不会,但现在到底是什么创建了一个实例。。。?

  • 本文向大家介绍c++ 构造函数中调用虚函数的实现方法,包括了c++ 构造函数中调用虚函数的实现方法的使用技巧和注意事项,需要的朋友参考一下 我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数。这种调用都是对象已经构建完成的情况。那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: 输出: 0 1 2 也就是说,在构造函数中调用虚函数,调用的是正在构造的类中的虚函

  • 问题内容: 到目前为止,我已经看到了两种在Java中设置变量值的方法。有时使用带有参数的构造函数,而其他setter方法则用于设置每个变量的值。 我知道,一旦使用“新”关键字实例化了一个类,构造函数就会在类内部初始化一个实例变量。 但是,什么时候使用构造函数,何时使用setter? 问题答案: 当您要创建对象的新实例时,应使用构造函数方法,该实例的值已填充(准备使用的对象中已填充值)。这样,您无需

  • 本文向大家介绍python构造函数init实例方法解析,包括了python构造函数init实例方法解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python构造函数init实例方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、创建对象,我们需要定义构造函数__init__()方法。构造方法用于执行"实例对象的初始化工作

  • 问题内容: 有谁知道为什么可以使用或而不是非静态方法在构造函数的第一行中引用方法? 考虑以下工作: 以及以下非工作示例: 问题答案: 非静态方法是实例方法。这只能在现有实例中访问,并且在构造函数中时实例尚不存在(它仍在构建中)。 为什么会这样呢?因为实例方法可以访问实例(非静态)字段,该字段在不同实例中可以具有不同的值,所以在现有的已完成实例之外的其他地方调用这种方法没有任何意义。