如何解决是否可以为每个子类运行一次静态作用域?
我下一堂课:
public abstract class base {
public static String name = "baseClass";
static {
System.out.println(name)
}
}
我认为这段代码将在extends
此类的每个方法中运行,并且将在子类的后发生。
例如:
public subclass extends base {
@Override
public static String name = "subclassInfo";
public subclass(){
System.out.println("hello")
}
}
我想参加第一次比赛:
你好
subclassInfo
,在下一轮中,我只会得到你好
我不想将静态作用域移至子类,我希望它会从基类移至子类,并且仅在子类的第一次调用中发生
解决方法
要在第一次创建子类的实例时打印子类名称,请执行以下操作:
public abstract class Base {
private static final Map<Class<?>,Boolean> subclasses = new ConcurrentHashMap<>();
{
if (subclasses.putIfAbsent(this.getClass(),Boolean.TRUE) == null)
System.out.println("New subclass: " + this.getClass().getName());
}
}
测试
class Sub1 extends Base {
}
class Sub2 extends Base {
}
class Sub3 extends Base {
}
public class Test {
public static void main(String[] args) {
System.out.println(new Sub3());
System.out.println(new Sub1());
System.out.println(new Sub1());
System.out.println(new Sub3());
}
}
输出
New subclass: Sub3
Sub3@24d46ca6
New subclass: Sub1
Sub1@372f7a8d
Sub1@2f92e0f4
Sub3@28a418fc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。