/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
include og preformance
Fra : Martin Schultz


Dato : 06-08-02 10:48

Hvis jeg includer med wildcards som i denne linie:
import java.util.*;

Vil det give dårligere preformance i mit program end hvis jeg gør
sådanne:

import java.util.ArrayList;

Eller er der nogen andre ulemper ved at bruge * ?

 
 
Lars Dam (06-08-2002)
Kommentar
Fra : Lars Dam


Dato : 06-08-02 10:54

On Tue, 06 Aug 2002 11:47:30 +0200, Martin Schultz
<mbox@linuxfreemail.com> wrote:

>Hvis jeg includer med wildcards som i denne linie:
>import java.util.*;
>
>Vil det give dårligere preformance i mit program end hvis jeg gør
>sådanne:
>
>import java.util.ArrayList;

Nej. import bliver kun checket ved compile time; og den forskel der er
er minimal.

>Eller er der nogen andre ulemper ved at bruge * ?

Nej.

Eller med andre ord: Don't bother.

vh. ld
---
"Time is the fire in which we burn"

Brian Matzon (06-08-2002)
Kommentar
Fra : Brian Matzon


Dato : 06-08-02 13:46

Lars Dam wrote:
>>Eller er der nogen andre ulemper ved at bruge * ?
>
>
> Nej.
>
> Eller med andre ord: Don't bother.

Øhh I beg to differ!
Når du compiler, vil det hele blive en smule langsommere - ikke meget,
men en smule.

Det størst problem ved * imports er når du importerer flere ting fra
forskellige pakker, hvis navne clasher.
f.eks:
import min.hurtige.matematikpakker.Rectangle;
import java.awt.*;

nu har du problemet, når du laver en variabel af typen Rectangle.
Hvilken skal den bruge . den fra din egen, eller den fra awt?

Derfor - væn dig til IKKE at bruge * imports, da det *kan* give
problemer i fremtiden, hvis der er nogen der udvider klassen.

(det er selvfølgeligt stadigt et problem hvis du både skal bruge awt
rectangle, og din egen - i så fald må du lave en fuld erklæring hver gang.)

I øvrigt, hvis du har et ordenligt IDE (http://www.netbeans.org),
programmerer du bare med * i starten, og refactor det til de rigtige
imports før du CVS'er.

/Brian Matzon


Martin Ehmsen (06-08-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-08-02 13:47

On Tue, 06 Aug 2002 11:54:28 +0200, Lars Dam wrote:

> On Tue, 06 Aug 2002 11:47:30 +0200, Martin Schultz
> <mbox@linuxfreemail.com> wrote:
>
>>Hvis jeg includer med wildcards som i denne linie: import java.util.*;
>>
>>Vil det give dårligere preformance i mit program end hvis jeg gør
>>sådanne:
>>
>>import java.util.ArrayList;
>
> Nej. import bliver kun checket ved compile time; og den forskel der er
> er minimal.

Det er netop en væstentlig forskel fra C's include <...> som er vigtig at
være opmærksom på.

Martin
--
"Science is like sex: sometimes something useful comes out, but that is
not the reason we are doing it"
   Richard Feyman

Ulrik Magnusson (06-08-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 06-08-02 19:17

Martin Schultz wrote:

> Hvis jeg includer med wildcards som i denne linie:
> import java.util.*;
> Vil det give dårligere preformance i mit program end hvis jeg gør
> sådanne:
> import java.util.ArrayList;

Nej - disse oplysninger bruges udelukkende under oversættelsen -
den genererede byte code refererer altid til klassen ved dens fulde
navn.

> Eller er der nogen andre ulemper ved at bruge * ?

Ja, faktisk. For nylig var der én der satte sig til at kigge
i et gammelt program jeg havde lavet (jdk 1.1.x), og det ville
pludseligt ikke compile. Nu kan vi jo lave en lille
gættekonkurrence med følgende oplysninger:

Øverst i nogle af filerne stod der
import java.awt.*;
import java.util.*;

Fyren prøvede at oversætte programmet med en j2sdk og
programmet blev oprindeligt udviklet med jdk 1.1.x.

Hvad kunne grunden være?
--
-- løsning nedenfor
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--

I java.util pakken er der tilføjet en List! klasse - denne
konflikter nu med java.awt.List..

Jeg har dog i meget lang tid før denne oplevelse brugt de
fulde navne da det irriterer mig at skulle gætte hvilken pakke
en klasse kommer fra hvis jeg ikke kender den i forvejen.
Det nedsætter "læse-flowet", da klassernes fulde navne
giver et fingerpeg om hvilken "slags" kode man kigger på
(gui: java.awt.List / ikke-gui: java.util.List).

Derudover synes jeg at jeg bedre husker/lærer API'en når
jeg tvinger mig selv til at skrive de fulde navne.

Venlig hilsen

Ulrik Magnusson


Martin Mouritzen (07-08-2002)
Kommentar
Fra : Martin Mouritzen


Dato : 07-08-02 00:45

After I finished the 3 Pan Galactic Gargle Blasters, Ulrik Magnusson
<ulrikm@yahoo.com> just offered me, he muttered some weird stuff, and
I had to correct this gibberish:

>Derudover synes jeg at jeg bedre husker/lærer API'en når
>jeg tvinger mig selv til at skrive de fulde navne.

Er det når du importer du benytter de fulde navne, eller konsekvent?
Altså f.eks.

java.util.List = new java.util.List();
--
Nano Martin Mouritzen Phone +45 27105580
Vesterbrogade 30C. 2. Programmer Advanced Simplicity
DK-8000 Århus martin@nano.dk http://www.nano.dk
Nano nu officiel dansk distributør af UltraEdit, se mere på websitet

Ulrik Magnusson (07-08-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 07-08-02 05:48

Martin Mouritzen wrote:

> >Derudover synes jeg at jeg bedre husker/lærer API'en når
> >jeg tvinger mig selv til at skrive de fulde navne.
>
> Er det når du importer du benytter de fulde navne, eller konsekvent?
> Altså f.eks.
>
> java.util.List = new java.util.List();

Det er nogenlunde konsekvent - java.lang klasser skriver jeg gerne
uden "sti". Bagdelen er "lang" kode som dette:

javax.swing.text.Highlighter.HighlightPainter painter
= new
javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(java.awt.Color.yellow);

- men jeg synes nu at fordelene opvejer det.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste