ServiceLoaderã§ãã©ã°ã¤ã³ã®ä»çµã¿ãããã£ã¨ä½ãã
ServiceLoaderã使ãã¨ããªã½ã¼ã¹ã使ã£ããã©ã°ã¤ã³ã®ä»çµã¿ãããã£ã¨ä½æã§ãã¾ãã
- ãµã¼ãã¹ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨å®è£ ãä½ãã
- jarå ã®ãMETA-INF/services/<ãµã¼ãã¹ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¯ã©ã¹å>ãã«ãµã¼ãã¹æ§æãã¡ã¤ã«ã使ãå®è£ ã¯ã©ã¹ã並ã¹ã¦ããã¾ãã
- å¾ã¯ããServiceLoader.load()ããå®è¡ããã°ããªã½ã¼ã¹ã«æ¸ãããå®è£ ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãåå¾å¯è½ã
ã¨ãããã¨ã§ã以ä¸ã¯ServiceLoaderã使ã£ã¦ã¿ããµã³ãã«ã§ãã
ãµã¼ãã¹ã¤ã³ã¿ã¼ãã§ã¤ã¹ (test/Kitten.java):
package test; public interface Kitten { void meow(); }
ãµã¼ãã¹ã®å®è£ x3 (test/Mii.java,test/Shiro.java,test/Tora.java) :
package test; public class Mii implements Kitten{ public void meow () { System.out.println( "mii : meow!" ); } }
package test; public class Shiro implements Kitten{ public void meow () { System.out.println( "shiro : meow!" ); } }
package test; public class Tora implements Kitten{ public void meow () { System.out.println( "tora : meow!" ); } }
ãµã¼ãã¹æ§æãã¡ã¤ã« (META-INF/services/test.Kitten) :
test.Mii test.Tora test.Shiro
ãµã¼ãã¹ãåãåºããµã³ãã«ã
// ç»é²ããã¦ãã Kitten ã®å®è£ ãåæããã for( Kitten k : ServiceLoader.load( Kitten.class ) ) { k.meow(); }
å®è¡çµæã§ãã
mii : meow! tora : meow! shiro : meow!
æãDOMãã¼ã¶ã¼ã®ä»çµã¿ã調ã¹ã¤ã¤èªåã§å®è£ ããè¨æ¶ãããã¾ãããæè¿ã¯æ¨æºã®APIã§ãµãã¼ãããã¦ããã§ããã¼ã便å©ã«ãªã£ããã®ã ã