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 Exceptions, embora as únicas exceções verificadas das quais você precisa estar ciente sejam comentadas acima.
A NoSuchFieldExceptionseria 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 IllegalAccessExceptionseria 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 RuntimeExceptions que podem ser lançados são SecurityExceptions (se as JVMs SecurityManagernão permitirem alterar a acessibilidade de um campo) ou IllegalArgumentExceptions, 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