Java >> Java tutorial >  >> Tag >> import

Fordele og ulemper ved at bruge Java Wildcard-import

1. Oversigt

I denne øvelse vil vi diskutere fordele og ulemper ved at bruge jokertegnimport i Java.

2. Importer i Java

Java import sætninger erklærer kilden til de navne (klassenavne, statiske variabler og metodenavne), der bruges i koden.

Lad os som et eksempel se på en bog klasse:

import java.util.Date;
import java.util.List;
import java.util.UUID;

public class Book {

    private UUID id;

    private String name;

    private Date datePublished;

    private List<String> authors;
}

Her skal vi importere de to datatyper Dato og UUID sammen med listen interface, da de ikke er tilgængelige som standard. Så vi skriver tre importudsagn for at have disse datatyper tilgængelige for vores klasse. Lad os omtale disse typer import som specifik import.

3. Java Wildcard-import

Jokertegnimporter refererer til import af en pakke i stedet for at angive specifikke klassenavne, der bruges fra en pakke.

Ved hjælp af jokertegn kan vi erstatte de tre importudsagn fra vores tidligere eksempel med kun én udsagn: 

import java.util.*;

public class Book {

    private UUID id;

    private String name;

    private Date datePublished;

    private List<String> authors;
}

Dette ene jokertegn import sætning tilføjer hele java.util pakke til søgestien, hvor de påkrævede navne på UUID , Dato, og Liste kan findes.

4. Fordele ved Wildcard-import

Naturligvis har jokertegnimport nogle fordele sammenlignet med specifik import i Java. Lad os diskutere de vigtigste fordele ved import af jokertegn i underafsnittene nedenfor.

4.1. Ren kode

Wildcard-importer hjælper os med at undgå en lang liste af importer i vores kode. Derfor påvirker dette kodens læsbarhed, da læseren muligvis skal rulle meget i hver kildekodefil, før den når koden, der viser logikken. Uden tvivl er mere læsbar kode også ren kode.

Denne idé understøttes også i Clean Code-bogen af ​​Robert C. Martin. Faktisk anbefaler bogen at bruge wildcard-import, når du bruger flere klasser fra samme kilde. Med andre ord, når vi importerer to eller flere klasser importeret fra en pakke, er det bedre at importere hele pakken.

4.2. Refaktoreringslethed

Med wildcard-import er refaktorering nemmere. For eksempel, når vi omdøber en klasse, behøver vi ikke at fjerne alle dens specifikke importerklæringer.

Desuden, hvis vi flyttede en klasse fra en af ​​vores pakker til en anden af ​​vores egne pakker, behøver vi ikke at omfaktorere nogen kode, hvis der allerede findes wildcard-import i filen for begge pakker.

4.3. Løs kobling

Wildcard-import håndhæver løskoblingstilgangen i moderne softwareudvikling.

Ifølge Robert C. Martin håndhæver ideen om import af jokertegn løs kobling. Ved specifikke importer skal klassen eksistere i en pakke. Ved import af jokertegn behøver bestemte klasser dog ikke at eksistere i pakken. Faktisk tilføjer jokertegnimporten den angivne pakke til søgestien, hvor der kan søges i de nødvendige klassenavne.

Derfor tilføjer importer med jokertegn ingen ægte afhængighed til pakken.

5. Ulemper ved Wildcard-import

Wildcard-import har også deres ulemper. Lad os derefter se på, hvordan import af jokertegn kan føre til nogle problemer.

5.1. Klassenavnekonflikter

Desværre kan der opstå konflikter, når et klassenavn findes i mere end én pakke, der importeres via jokertegn.

I dette tilfælde bemærker compileren, at der er to Dato klasser og giver en fejl siden Datoen klasse findes i både java.sql og java.util pakker:

import java.util.*;
import java.sql.*;

public class Library {

    private UUID id;

    private String name;

    private Time openingTime;

    private Time closingTime;

    private List<Date> datesClosed;
}

For at forhindre en sådan fejl kan vi angive den ønskede kilde til den konfliktfyldte klasse.

For at forhindre fejlen i eksemplet ovenfor, kan vi tilføje en tredje linje, der angiver kilden til den konfliktfyldte dato klasse til de to eksisterende importer:

import java.util.*;
import java.sql.*;
import java.sql.Date;

5.2. Uforudsete klassenavnekonflikter

Interessant nok kan konflikter også dukke op over tid, såsom når en klasse føjes til den nyere version af en anden pakke, som vi bruger.

For eksempel i Java 1.1 er Listen klasse blev kun fundet i java.awt pakke. Men med Java 1.2, en grænseflade kaldet List blev tilføjet til java.util pakke.

Lad os se et eksempel:

import java.awt.*;
import java.util.*;

public class BookView extends Frame {

    private UUID id;

    private String name;

    private Date datePublished;

    private List<String> authors;
}

Til sidst kan denne situation potentielt forårsage en konflikt, når både java.awt og java.util pakker importeres som jokertegn importer. Derfor kan vi potentielt stå over for problemer, når migrer kode til en nyere Java-version.

6. Konklusion

I denne artikel diskuterede vi import udsagn i Java og hvad import af jokertegn er. Vi lærte fordele og ulemper ved at bruge wildcard-import i vores programmer.Brug af wildcard-import versus specifik import er fortsat en populær debat i Java-samfundet. Kort sagt, vi kan sige, at importmetoden med jokertegn har fordele, men brugen af ​​den kan forårsage problemer i visse situationer. Som altid er kildekoden til eksemplerne tilgængelig på GitHub.
Java tag