fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. import java.lang.reflect.Type;
  9. import java.lang.reflect.ParameterizedType;
  10. import java.util.Arrays;
  11. import java.util.stream.*;
  12.  
  13. class ToBeReflectedOn {
  14. public static ArrayList<String> returnsAStringList() {
  15. return new ArrayList<String>();
  16. }
  17. }
  18.  
  19. class Ideone
  20. {
  21. public static void main (String[] args) throws java.lang.Exception
  22. {
  23. ToBeReflectedOn toBeReflectedOn = new ToBeReflectedOn();
  24. Class c = toBeReflectedOn.getClass();
  25. Method returnsAStringListMethod = Arrays.stream(c.getDeclaredMethods())
  26. .filter(m -> m.getName() == "returnsAStringList")
  27. .collect(Collectors.toList()).get(0);
  28. System.out.println(
  29. "\nName: " + returnsAStringListMethod.getName()
  30. + "\nDeclaring Class: " + returnsAStringListMethod.getDeclaringClass().getName()
  31. + "\nReturn Type: " + returnsAStringListMethod.getReturnType().getName()
  32. + "\nGeneric Return Type: " + returnsAStringListMethod.getGenericReturnType().getTypeName()
  33. + "\nStackOverflow suggested answer: " + simpleTypeName(returnsAStringListMethod.getGenericReturnType())
  34. );
  35. }
  36.  
  37. static String simpleTypeName(Type t) {
  38. if (t instanceof ParameterizedType) {
  39. ParameterizedType p = (ParameterizedType) t;
  40. return simpleTypeName(p.getRawType())
  41. + Stream.of(p.getActualTypeArguments())
  42. // Recurse to handle the type arguments.
  43. .map(Ideone::simpleTypeName)
  44. .collect(Collectors.joining(", ", "<", ">"));
  45. } else if (t instanceof Class) {
  46. Class<?> c = (Class<?>) t;
  47. return c.getSimpleName();
  48. } else {
  49. return t.getTypeName();
  50. // ... handle other Type subtypes.
  51. }
  52. }
  53. }
Success #stdin #stdout 0.2s 54724KB
stdin
Standard input is empty
stdout
Name: returnsAStringList
Declaring Class: ToBeReflectedOn
Return Type: java.util.ArrayList
Generic Return Type: java.util.ArrayList<java.lang.String>
StackOverflow suggested answer: ArrayList<String>