Type variable verwenden um Instanz zu erzeugen?

Romsl

Erfahrenes Mitglied
Hi,

gibt es die Möglichkeit von einer "type variable" - (bspw T) - eine Instanz zu erzeugen?

Code:
public T createInstance() {
        try {
            // So in dieser Art
            // return getInstance(T);
        }
        catch (InstantiationException ie) {
            if (LOG.isErrorEnabled()) {
                LOG.error(ie.getMessage(), ie);
            }
        }
        catch (IllegalAccessException iae) {
            if (LOG.isErrorEnabled()) {
                LOG.error(iae.getMessage(), iae);
            }
        }

        return null;
    }

Gruß

Romsl
 
Hallo!

Mit einer Generischen TypeVariable kann man das so nicht machen.Zur Laufzeit gibt es durch das Type Ereasure keine "T's" mehr...

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;

/**
 * @author daritho
 * 
 */
public class GenericTypeExample {
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		System.out.println(createInstance(Foo.class, "Foo"));
		System.out.println(createInstance(Bar.class, 4711, "Bar"));
		System.out.println(createInstance(Dimension.class));
	}

	static <T> T createInstance(Class<T> clazz, Object... args)
			throws Exception {
		List<Class> argsClasses = new ArrayList<Class>();
		for (Object arg : args) {
			argsClasses.add(arg.getClass());
		}
		return clazz.getDeclaredConstructor(
				argsClasses.toArray(new Class[args.length])).newInstance(args);
	}

	static class Foo {
		String data;
		public Foo(String data) {
			this.data = data;
		}
		public String toString() {
			return super.toString() + "->" + this.data;
		}
	}

	static class Bar {
		Integer id;
		String data;
		public Bar(Integer id, String data) {
			this.id = id;
			this.data = data;
		}
		public String toString() {
			return super.toString() + "->" + this.id + ":" + this.data;
		}
	}
}

Gruss Tom
 
Zurück