Conversão muito dinâmica

Tem alguma forma de fazer isso em java?

Integer i = new Integer (5);
Integer ret = (“java.lang.Integer”) new Object();
ou
Integer ret = (i.getClass()) new Object();

entenderam?
em vez de fazer :
Integer ret = (Integer) new Object();

fazer daquele jeito ali em cima?
nao tem como? com reflection, ou algo assim?

Eu quero fazer algo assim…

Eu tenho este método getService que retorna um item.

Este item é um serviço do mesmo tipo da classe passada como parâmetro dentro do array ServiceType[].

um exemplo de chamada do método getService seria:

 TransactionManager txm = null;

	 

   Class serviceTransaction [] = {TransactionManager.class};	    

    txm = (TransactionManager) LookupUtils.getService("url", serviceTransaction); 

//outro exemplo: 

 JavaSpace space = null;
	 

  Class serviceSpace [] = {JavaSpace.class};	    	    
   txm = (JavaSpace) LookupUtils.getService("url", serviceSpace); 

Vejam que eu sempre tenho que realizar a conversão de tipo quando o uso o getService.

O que eu queria fazer era realizar a conversão já no método getService, para evitar de ter que realizar a conversão toda vez que chamo o método getService. Seria algo como uma conversão automática.
Ele reconheceria o contido em ServiceType[] e realizaria a conversão.

não tem como fazer isso com aqueles e aquelas coisas que surgiram no java 5?
como seria?

public class LookupUtils {

    
    public static Object getService(String url, Class ServiceType[]) throws Exception{

	Exception ex = null;
	Object item = null;
	if (System.getSecurityManager() == null)
	    System.setSecurityManager(new RMISecurityManager());
	
	try {
	    LookupLocator locator = new LookupLocator(url);
	    ServiceRegistrar registrar = locator.getRegistrar();
	    ServiceTemplate template = new ServiceTemplate(null, ServiceType, null);
	    item =  registrar.lookup(template);	    
	    
	    
	} catch (MalformedURLException mue) {	    
	    ex = mue;
	} catch (RemoteException re){
	    ex = re;	    
	} catch (Exception e){
	    e.printStackTrace();
	}
	
	if (item == null)
	    throw ex;
	
	return item;
    }
}

Generics eh o nome do que vc quer.

Rafael

Completando o que o Rafael lhe disse.

class LookupUtils<T> {
    public static <T> T getService (String url, Class<T> klass) {
        System.out.println ("getService(" + url + "," + klass.getName() + ")");
        T item = null;
        try {
            item = klass.newInstance();
        } catch (InstantiationException ex) {
        } catch (IllegalAccessException ex) {
        }
        return item;
    }
}
class JavaSpace {
    public JavaSpace () { System.out.println ("JavaSpace"); }
}
class TransactionManager {
    public TransactionManager () { System.out.println ("TransactionManager"); }
}

class ExemploGenerics {
    public static void main(String[] args) {
//    Class serviceSpace [] = {JavaSpace.class};	    	    
//    txm = (JavaSpace) LookupUtils.getService("url", serviceSpace); 
        JavaSpace space = LookupUtils.getService ("url1", JavaSpace.class);
        TransactionManager txm = LookupUtils.getService ("url2", TransactionManager.class);
    }
}

thingol,
fiz o código do meu método baseado no seu exemplo.

    public static <T> T getService (String url, Class <T> serviceType) throws Exception
    {
	T item = null;
	Exception ex = null;
	
	Class serviceTypes[] = {serviceType};
	
		
	if (System.getSecurityManager() == null)
	    System.setSecurityManager(new RMISecurityManager());
	
		
	
	try {
	    LookupLocator locator = new LookupLocator(url);
	    ServiceRegistrar registrar = locator.getRegistrar();
	    
	    ServiceTemplate template = new ServiceTemplate(null, serviceTypes, null);
	    item = (T) registrar.lookup(template);
	    
	} catch (MalformedURLException mue) {	    
	    ex = mue;
	} catch (RemoteException re){
	    ex = re;	    
	} catch (Exception e){
	    e.printStackTrace();
	}

	if (item == null)
	    throw ex;
	return item;
    }

mas na linha
item = (T) registrar.lookup(template);
o compilador gera um warning:

	Type safety: The cast from Object to T is actually checking against the 
	 erased type Object

será que tá certo o que eu to fazendo? (ainda não tenho como testar o código).

a chamada do método registrar.lookup retorna um Object que eu to tentando converter para o tipo da classe passada como parâmetro (serviceType).
?

EDIT
agora eu substitui aquilo por
item = serviceType.cast(registrar.lookup(template));
que eliminou o warning e talvez funcione.