it-swarm.com.de

Wann würde ich meine Privatklasse statisch machen wollen?

Gibt es im Allgemeinen Vorteile, eine private Klasse als statisch zu erklären?

In welchen Fällen möchte ich eine der folgenden Optionen verwenden?

private static class Foo
{
    ...
}

vs

private class Foo
{
    ...
}
54
His

Ich denke, das ist ein guter Ausgangspunkt: http://Java67.blogspot.fi/2012/10/nested-class-Java-static-vs-non-static-inner.html

1) Verschachtelte statische Klasse benötigt keine Referenz der äußeren Klasse, aber keine statisch verschachtelte Klasse oder innere Klasse erfordert den Verweis auf die äußere Klasse. Sie Instanz der Klasse Inner kann nicht erstellt werden, ohne Instanz von .__ zu erstellen. Äußere Klasse Dies ist bei weitem das Wichtigste, das zu beachten ist. eine verschachtelte Klasse statisch oder nicht statisch machen.

2) statische Klasse ist eigentlich statisches Mitglied der Klasse und kann in .__ verwendet werden. statischer Kontext, z. statische Methode oder statischer Block der äußeren Klasse.

3) Ein weiterer Unterschied zwischen statischen und nicht statischen verschachtelten Klassen ist dass Sie nicht auf nicht statische Mitglieder zugreifen können, z. Methode und Feld in geschachtelte statische Klasse direkt. Wenn Sie dies tun, erhalten Sie die Fehlermeldung "Nicht Statisches Member kann nicht im statischen Kontext verwendet werden". Während innere Klasse kann sowohl auf statische als auch auf nicht statische Member der Outer-Klasse zugreifen.

37
Esko Piirainen

Wenn Sie Zugriff auf die Member-Variablen/-Methoden der umgebenden Klasse benötigen, verwenden Sie das nicht statische Formular. Wenn nicht, verwenden Sie die statische Form.

2
Jeff Storey

Ich würde davon ausgehen, dass Sie sich auf innere Klassen beziehen.

Ich denke, die Motivation würde sich daraus ergeben, wie Sie Ihre innere Klasse verbinden wollen. Wenn Ihre innere Klasse einer bestimmten Instanz ihrer äußeren Klasse zugeordnet werden soll, verwenden Sie private class. Andernfalls verwenden Sie private static class.

1
Paul

Ich fand es nützlich, eine bestimmte Ausnahme in einer generischen abstrakten Klasse zu haben. I.e .:

public abstract class AbstractClass <T>
{
    private void doSomethingOrThrowException() throws SpecificException
    {
        ....

        if ( ! successful)
        {
            throw new SpecificException();
        }
    }

    private static class SpecificException extends Exception {}
}

Wenn ich die Statik weglasse, würde ich vom Compiler eine Fehlermeldung erhalten, die besagt: The generic class AbstractClass<T>.SpecificException may not subclass Java.lang.Throwable

0
Deiwin