Generischer Type instanziieren



  • Folgendes:

    class Foo 
    {
    public Foo(String name){...}
    }
    
    class Bar<T extends Foo>
    {
    
       public T Create(String name)
    {
    T t = T.class.getConstructor(String.class).newInstance(name);
    return t;
    }
    }
    

    hier bekomm ich bei der instaziierung foolgender compilerfehler:

    java: cannot select from a type variable

    gehts das überhaupt??



  • So was funktioniert nicht, da die Typen zur Laufzeit gelöscht werden. Java kann dann nicht wissen, was T für ein Typ ist und demzufolge auch keine neuen Objekte des Typs erzeugen. Du kannst lediglich ein Class-Exemplar in die Create-Methode übergeben:

    /**
         */
        @Test
        public void test()
        throws Exception
        {
            Bar<Foo> b = new Bar<>();
            b.Create(Foo.class, "Hallo");
        }
    
        static class Foo
        {
            public Foo(String name){}
        }
    
        static class Bar<T extends Foo>
        {
            public T Create(Class<T> c, String name)
            throws Exception
            {
                T t = c.getConstructor(String.class).newInstance(name);
                return t;
            }
        }
    

Anmelden zum Antworten