In your second code snippet, cl will actually be Class<POP> but cl2 is Class<String>, which I guess is not what you expect. Assuming you are coding in Java 5 or newer, you should not use the raw types (Class instead of Class<?>), this will make your code safer and easier to read.
Also note that you have to use the fully qualified class name, and not just the simple name of your classes. For example
Class.forName("String"); // Won't work
Class.forName("java.lang.String"); // Is what you need.
When you have a Class instance you can use reflection to create new instances dynamically:
Class<?> cl2 = ... ;
// If the class has a no-arg visible constructor
Object foo = cl2.newInstance();
// Or using an explicit constructor (here with an integer and a String as arguments)
Constructor<Class<?>> cons = cl2.getConstructor(Integer.class, String.class);
Object bar = cons.newInstance(1, "baz");
But maybe what you are trying to achieve could be done using the Abstract Factory pattern ? You provide an object that is able to create instances of the type that you want, and you can choose the factory to use based on the class name.
http://c2.com/cgi/wiki/wiki?AbstractFactoryPattern
aso???????should beClass, but i don't think that's what you wanted :-) You can probably achive what you want by declaringclto be an interface type which is implemented by your classes.