在Java中是否可以通过代码检查是否已在静态上下文中创建对象?
背景:我想决定给定的对象,如果我根据它的类型(在静态上下文中创建的静态类/对象 - >强引用,常规对象 - >弱)来存储弱引用或强引用参考)。我需要将引用保存在一个可能长期存在的请求中,这可能是唯一保留引用引用的对象。由于我正在为Android编程,这些对象可能是活动,我不想仅仅因为仍然存在可能过时的请求而保留这些活动 - 因此在这种情况下需要弱引用。但是如果请求是由静态类或静态上下文创建的,我想保留静态类(这些类通常不会占用与整个活动相反的内存)。
希望这些要求听起来不太粗糙。 ;)我们计划在未来交换基于活动的通信,转而支持单一的通信服务,但暂时只有弱引用的简单解决方案(以及绝对必要的强引用)也将这样做。
答案 0 :(得分:1)
简单地说:不。
您可以将new关键字想象为静态方法调用(如工厂方法)。没有上下文传递给构造函数,除了它的参数(对于非静态内部类,编译器神奇地将父对象引用添加为参数。这在源代码中是不可见的。)
执行此操作的简单方法是向构造函数添加一个参数,让调用者明确决定他想要的内容。