Avatar billede kernelx Juniormester
24. juli 2008 - 19:15 Der er 5 kommentarer og
1 løsning

Templates i Java (som i HashMap)

Hi,

i f.eks. en HashMap kan jeg definere to Class-Types indenfor "<" og ">":
HashMap<String,String> hash = new HashMap<String,String>();

Hvordan kan jeg selv lave en class, hvor det er muligt at arbejde med saadan nogle Templates?

Hvordan kan jeg faa foelgende code til at virke?
+++
class SelvLavetClass<classTemplate1,classTemplate2> {
   
    private <classTemplate1> object1 = null;

    public void set1( <classTemplate1> object ) {
      this.object1 = object;
    }

}
+++

med venlig hilsen
KernelX
Avatar billede arne_v Ekspert
24. juli 2008 - 19:25 #1
foelgende boer compile:

class SelvLavetClass<classTemplate1,classTemplate2> {
     
    private classTemplate1 object1 = null;

    public void set1( classTemplate1 object ) {
      this.object1 = object;
    }

}
Avatar billede arne_v Ekspert
24. juli 2008 - 19:33 #2
Et par eksempler:

public class Pair<T> {
    private T a;
    private T b;
    public Pair(T a, T b) {
        this.a = a;
        this.b = b;
    }
    public String toString() {
        return "Pair of " + a.getClass().getSimpleName();
    }
    public static void main(String[] args) {
        System.out.println(new Pair<Integer>(1, 2));
        System.out.println(new Pair<Double>(1.2, 3.4));
        System.out.println(new Pair<String>("AB", "CD"));
    }
}

og

public class GenMax {
    public static <T extends Comparable<? super T>> T Max(T a, T b) {
        if (a == null) return b;
        if (b == null) return a;
        if (a.compareTo(b) >= 0)
            return a;
        else return b;
    }
    public static void main(String[] args) {
        System.out.println(Max(123,456));
        System.out.println(Max(12.3,45.6));
        System.out.println(Max("ABC","DEF"));
    }
}
Avatar billede arne_v Ekspert
24. juli 2008 - 19:35 #3
2 noter:

1)  kald det generics ikke templates - templates giver associationer til C++ templates
    og der er store forskelle

2)  hvis du vil undgaa problemer saa hold dig til simpel brug af generics - der er
    rigtigt mange giftigheder gemt i det
Avatar billede kernelx Juniormester
24. juli 2008 - 19:57 #4
mange tak.

husk at skrive svar :-)
Avatar billede kernelx Juniormester
24. juli 2008 - 19:58 #5
skal det vaere et T ... eller kan det vaere noget selv-valgt?
f.eks.: public class Pair<nogetSelvValgt> { ... }
Avatar billede arne_v Ekspert
24. juli 2008 - 20:07 #6
selvvalgt

men T for en og T1 og T2 for to er meget brugte

og svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester