/** * 根据设置的参数构造相应的 {@code Fetcher} 对象。<br> * 构造完成后,将会重置该 {@code FetcherBuilder}。<br> * 如果参数未设置或设置不全将会抛出 {@code IllegalStateException} 异常。 * * @return {@code Fetcher} 对象 * @throws IOException 构造失败 */ public Fetcher build() throws IOException { try { requireNonNull(site, "The parameter 'site' haven't been set yet."); requireNonNull(page, "The parameter 'page' haven't been set yet."); } catch (NullPointerException e) { throw new IllegalStateException(e); } if (isNullOrEmpty(userAgent)) userAgent = UserAgent.getUserAgent(); if (site.equals("*")) site = matchSiteFromPage(page); Fetcher fetcher; switch (site) { case "uta-net.com": fetcher = new UtaNetFetcher(page, userAgent); break; case "j-lyric.net": fetcher = new JLyricFetcher(page, userAgent); break; case "utamap.com": fetcher = new UtaMapFetcher(page, userAgent); break; case "kasi-time.com": fetcher = new KasiTimeFetcher(page, userAgent); break; case "kashinavi.com": fetcher = new KashiNaviFetcher(page, userAgent); break; case "kget.jp": fetcher = new KGetFetcher(page, userAgent); break; case "utaten.com": fetcher = new UtaTenFetcher(page, userAgent); break; case "animap.jp": fetcher = new AniMapFetcher(page, userAgent); break; case "evesta.jp": fetcher = new EvestaFetcher(page, userAgent); break; case "jtw.zaq.ne.jp/animesong": fetcher = new AnimeSongFetcher(page, userAgent); break; case "joysound.com": fetcher = new JoySoundFetcher(page, userAgent); break; case "petitlyrics.com": fetcher = new PetitLyricsFetcher(page, userAgent); break; default: throw new IllegalArgumentException("Unable to resolve the parameter 'site': " + site); } return fetcher; }