Para acessar campos particulares, você precisa obtê-los dos campos declarados da classe e torná-los acessíveis:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT : como comentado por aperkins , acessando o campo, configurando-o como acessível e recuperando o valor pode gerar Exception
s, embora as únicas exceções verificadas das quais você precisa estar ciente sejam comentadas acima.
A NoSuchFieldException
seria lançada se você pediu um campo por um nome que não corresponde a um campo declarado.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
A IllegalAccessException
seria lançada se o campo não era acessível (por exemplo, se é privado e não foi tornado acessível via perdendo a f.setAccessible(true)
linha.
Os RuntimeException
s que podem ser lançados são SecurityException
s (se as JVMs SecurityManager
não permitirem alterar a acessibilidade de um campo) ou IllegalArgumentException
s, se você tentar acessar o campo em um objeto que não seja do tipo da classe do campo:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type