fork download
  1. import java.lang.reflect.Method;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5.  
  6.  
  7. public class Main
  8. {
  9. public static void main(String[] args)
  10. {
  11. Condition c = new Condition();
  12. List<Class<? extends Base>> classList = Arrays.asList(ClassFoo.class, ClassBaa.class);
  13.  
  14. List<Base> result = classList.stream()
  15. .map(e -> newInstanceWithCondition(e, c))
  16. .collect(Collectors.toList());
  17.  
  18. result.forEach(System.out::println);
  19. }
  20.  
  21.  
  22. static Base newInstanceWithCondition(Class<? extends Base> clazz, Condition c)
  23. {
  24. try
  25. {
  26. Method method = clazz.getMethod("newInstanceWithCondition", Condition.class);
  27. return (Base) method.invoke(null, c);
  28. } catch (Exception e)
  29. {
  30. throw new RuntimeException(e);
  31. }
  32. }
  33. }
  34.  
  35. class Base
  36. {
  37. @Override
  38. public String toString()
  39. {
  40. return String.format("%sのインスタンスです。", getClass());
  41. }
  42. }
  43.  
  44.  
  45. interface BaseIF{}
  46.  
  47.  
  48. class Condition{}
  49.  
  50.  
  51. class ClassFoo extends Base implements BaseIF
  52. {
  53. public static ClassFoo newInstanceWithCondition(Condition c)
  54. {
  55. System.out.println("ClassFoo#newInstanceWithCondition(Condition c)が呼ばれました");
  56. return new ClassFoo();
  57. }
  58. }
  59.  
  60.  
  61. class ClassBaa extends Base implements BaseIF
  62. {
  63. public static ClassBaa newInstanceWithCondition(Condition c)
  64. {
  65. System.out.println("ClassBaa#newInstanceWithCondition(Condition c)が呼ばれました");
  66. return new ClassBaa();
  67. }
  68. }
Success #stdin #stdout 0.08s 711168KB
stdin
Standard input is empty
stdout
ClassFoo#newInstanceWithCondition(Condition c)が呼ばれました
ClassBaa#newInstanceWithCondition(Condition c)が呼ばれました
class ClassFooのインスタンスです。
class ClassBaaのインスタンスです。