Why would you ever implement finalize()?

前端 未结 21 2650
耶瑟儿~
耶瑟儿~ 2020-11-22 16:50

I\'ve been reading through a lot of the rookie Java questions on finalize() and find it kind of bewildering that no one has really made it plain that finalize()

21条回答
  •  无人及你
    2020-11-22 17:24

    Personally, I almost never used finalize() except in one rare circumstance: I made a custom generic-type collection, and I wrote a custom finalize() method that does the following:

    public void finalize() throws Throwable {
        super.finalize();
        if (destructiveFinalize) {
            T item;
            for (int i = 0, l = length(); i < l; i++) {
                item = get(i);
                if (item == null) {
                    continue;
                }
                if (item instanceof Window) {
                    ((Window) get(i)).dispose();
                }
                if (item instanceof CompleteObject) {
                    ((CompleteObject) get(i)).finalize();
                }
                set(i, null);
            }
        }
    }
    

    (CompleteObject is an interface I made that lets you specify that you've implemented rarely-implemented Object methods like #finalize(), #hashCode(), and #clone())

    So, using a sister #setDestructivelyFinalizes(boolean) method, the program using my collection can (help) guarantee that destroying a reference to this collection also destroys references to its contents and disposes any windows that might keep the JVM alive unintentionally. I considered also stopping any threads, but that opened a whole new can of worms.

提交回复
热议问题