521 Stimmen

Importname in Java ändern oder zwei Klassen mit demselben Namen importieren

In Python können Sie eine:

from a import b as c

Wie würden Sie dies in Java tun, da ich zwei Importe habe, die miteinander kollidieren.

9voto

kane Punkte 4834

Es ist lächerlich, dass Java das noch nicht hat. Scala hat es

import com.text.Formatter
import com.json.{Formatter => JsonFormatter}

val Formatter textFormatter;
val JsonFormatter jsonFormatter;

6voto

DarthGizka Punkte 3888

Solange es keine Probleme mit Nicht-Standard-Konstruktoren gibt, können Sie dies immer tun (während wir alle darauf warten, dass die Java-Sprachenspezifikation aufholt):

public class YaddaYadda
{
    private static class ZU extends eu.zrbj.util.ZrbjUtil_3_0 { }

    public void foo (String s)
    {
        if (ZU.isNullOrEmpty(s))
        {
            // ...

Für die projektweite Verwendung kann die "Import"-Klasse in eine separate Klassendatei aufgenommen werden, so dass der Import an einer einzigen Stelle definiert wird.

Dies ist vor allem im Hinblick auf "Bibliotheksklassen", d. h. Sammlungen von statischen Dienstprogrammen, von großem Nutzen. Zum einen gibt es Ihnen die Möglichkeit, diese Ungetüme - wie im Beispiel gezeigt - ohne größere Unannehmlichkeiten für den Benutzer zu versionieren.

-5voto

4thex Punkte 966

Tatsächlich ist es möglich, eine Abkürzung zu erstellen, so dass Sie kürzere Namen in Ihrem Code verwenden können, indem Sie etwas wie dies tun:

package com.mycompany.installer;
public abstract class ConfigurationReader {
    private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
    public abstract String getLoaderVirtualClassPath();
    public static QueryServiceConfigurationReader getInstance() {
        return new Implementation();
    }
}

Auf diese Weise müssen Sie den langen Namen nur einmal angeben, und Sie können so viele speziell benannte Klassen haben, wie Sie wollen.

Eine weitere Sache, die ich an diesem Muster mag, ist, dass man die implementierende Klasse genauso nennen kann wie die abstrakte Basisklasse und sie einfach in einen anderen Namespace stellen kann. Das hat aber nichts mit dem Import/Umbenennungsmuster zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X