

interface を 使用 した class を取得したい

[code]

      public interface IExtension {
        String getName();
    
        String getVersion();
      }
    
      public class AExtension implements IExtension {
    
        @Override
        public String getName() {
          return "A";
        }
    
        @Override
        public String getVersion() {
          return "1.0.0";
        }
      }
    
      public class BExtension implements IExtension {
    
        @Override
        public String getName() {
          return "B";
        }
    
        @Override
        public String getVersion() {
          return "1.0.0";
        }
      }
    
[/code]


CC BY-SA 4.0
2018-07-11T05:06:53.673
45497
2018-07-11T05:36:16.960
29254
question
java
Java: interface を implements した class を 探す方法


`implements IExtension`のキーワードでソースディレクトリをgrepするか、IDEの検索機能（Type
Hierarchyなど）を利用すればいいと思います。


CC BY-SA 4.0
2018-07-11T05:27:59.797
45499
2018-07-11T05:27:59.797
21092
45497
answer


Javaの実行時に
という意味だと、[reflections](https://github.com/ronmamo/reflections)のgetSubTypesOfメソッドを使って取得する方法があります。

[code]

    package com.detect.subclasses;
    
    import org.reflections.Reflections;
    import org.testng.annotations.Test;
    
    import java.util.Set;
    
    public class DetectSubClassesTest {
    
        @Test
        public void getSubclasses() {
            Set<Class<? extends IExtension>> subTypes =
                    new Reflections("com.detect.subclasses").getSubTypesOf(IExtension.class);
    
            assert subTypes.size() == 2;
    
            subTypes.forEach(System.out::println);
        }
    
        public interface IExtension {
            String getName();
    
            String getVersion();
        }
    
        public static class AExtension implements IExtension {
    
            @Override
            public String getName() {
                return "A";
            }
    
            @Override
            public String getVersion() {
                return "1.0.0";
            }
        }
    
        public static class BExtension implements IExtension {
    
            @Override
            public String getName() {
                return "B";
            }
    
            @Override
            public String getVersion() {
                return "1.0.0";
            }
        }
    }
    
[/code]

Result:

[code]

    class com.detect.subclasses.DetectSubClassesTest$AExtension
    class com.detect.subclasses.DetectSubClassesTest$BExtension
    
[/code]


CC BY-SA 4.0
2018-07-11T05:30:16.550
45501
2018-07-11T05:30:16.550
24823
45497
answer