Método Generico

Pessoal estou enviando um método que fiz, gostaria de saber se tem como generalizar uma parte dele, usei reflection e implementei uma outra classe, não sei se entendi ao certo o conceito de interface. A classe está funcionando normal, mais por agora eu gostaria de saber(começa na linha 27) se tem como eu passar o parametro de modo diferente? pois como ele eu verifico o tipo do parametro que o get recebe, int ou String, mais isso gera um problema, caso eu tenha outros tipos como double, boolean e etc, eu vou tem que ficar colocando um if para cada um deles?
Alguma luz?

Segue o código.

@Override
	public List<PessoaJuridica> select(PessoaJuridica obj)
			throws SQLException, IllegalArgumentException,
			IllegalAccessException, InvocationTargetException,
			InstantiationException {
		// TODO Auto-generated method stub
                // aqui vai meu select
		String sql = "select * from pessoas juridicas";
		connection = MsSqlConnectionFactory.getConnection();
		pStatement = connection.prepareStatement(sql);
		resultSet = pStatement.executeQuery();
		Class<?> clazz = obj.getClass();
		List<PessoaJuridica> objs = new ArrayList<PessoaJuridica>();
		System.out.println("Selecionando pessoas...");
		while (resultSet.next()) {
			// System.out.printf("... posição %d\r", resultSet.getRow());
			int i = 0;
			obj = (PessoaJuridica) clazz.newInstance();
			for (Method method : clazz.getDeclaredMethods()) {
				if (method.getName().toString().substring(0, 3).contains("set")) {
					i++;
					Class<?> paramTypes[] = method.getParameterTypes();
					Object o = new Object();
					o = resultSet.getObject(i);
					if (o != null) {
						if (!o.equals("")) {
                                                        //aqui é onde eu queria generalizar.
							if (paramTypes[0].toString().equals("int")) {
								o = (resultSet.getInt(i));
							}
							if (paramTypes[0].toString().equals(
									"class java.lang.String")) {
								o = (resultSet.getString(i));
							}
							method.invoke(obj, o);
						}
					}
				}
			}
			objs.add(obj);
		}
		System.out.println("Finalizando a iteração do resultSet...");
		return objs;
	}

Use o método isAssignableFrom.

Class<?> klass = .....;
if (int.class.isAssignableFrom (klass))) {
    ....
} else if (String.class.isAssignableFrom (klass)) {
    ....
} ....

Mesmo usando o isAssignableFrom eu teria que fazer um if para cada um, int, string, double.

O resultSet tem um método getObject que retorna o objeto sem precisar especificar o tipo. Depois vc precisa de uma classe utilitária para fazer a conversão.

Essa classe é que tem que ser bem desenhada utilizando padrões como Strategy para evitar os ifs.

Eu usei essa mesma estratégia no middleheaven para ler do resultSet

public Object getFieldValue(EntityFieldModel fieldModel) { try { Object value = rs.getObject(model.fieldModel(fieldModel.getLogicName()).getHardName().getName()); if (fieldModel.getDataType().isReference()){ return value; } else { return TypeCoercing.coerce(value, fieldModel.getValueClass()); } } catch (SQLException e) { throw new StorageException(e); } }
na classe ResultSetStorable

TypeCoercing é a classe utilitária de que falei.

Vou fazer aqui, qualquer duvida eu posto.
Obrigado.

Sergio, revirei o googlecode do avesso e não achei a TypeCoercing:

import org.middleheaven.util.coersion.TypeCoercing;

pode me mandar no meu email?
eduardo.r.luz [at] gmail [dot] com
ou atualizar no middleheaven?

Grato.