栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在this(…)或super(…)之前“插入”代码?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在this(…)或super(…)之前“插入”代码?

这是我发现的一种通用方法。它允许在调用

this(...)
或之前插入任何代码
super(...)
,从而克服Java的限制
this(...)
super(...)
成为构造函数中的第一条语句。

public class Test {    private final int n;    private final int m;    private final int[] store;    public Test(int n, int m) {        // Primary constructor is unchanged        this.n = n;        this.m = m;        store = new int[n];        // ...    }    private static class ConstrParams {        private int nParam;        private int mParam;                private ConstrParams(Object data) {  nParam = 1; mParam = 2;        }    }        private Test(ConstrParams params) {        this(params.nParam, params.mParam);        //        super(params.nParam, params.mParam);            }    public Test(Object data) {        // Specific constructor. Now compiles successfully.        this(new ConstrParams(data));        // ... further initialization    }}

优势包括:

  • 调用构造函数的代码不受影响。这在使用时特别有用,
    super(...)
    因为对祖先类的更改通常是不希望的或不可能的。使用时
    this(...)
    ,上述方法不会影响任何依赖主构造函数的代码。
  • 它不取决于调用的构造函数所需的参数数量。只需在
    ConstrParams
    类的字段中添加任意数量的它们,然后在调用主构造函数或继承的构造函数之前进行提取。如果参数是联合计算的(即,将其计算分为两个或更多个独立的方法是不可能的,或者是很昂贵的),则这种方法可以做到这一点。在某些情况下(经常是)被调用的构造函数不带任何参数,而您只需要在
    this(...)
    super(...)
    调用之前在依赖的构造函数中执行一些操作(此类操作的一个示例是日志记录)。此解决方案使您可以执行此操作。
  • ConstrParams
    产生参数和/或产生副作用的辅助类可用于其他目的。如果主类的一个以上辅助构造函数需要克服
    this(...)/super(...)
    调用限制,则可以在其中引入更多构造函数。
  • 统一应用于
    this(...)
    super(...)
    调用。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号