⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesiterable.java

📁 树形的java classloader,树形的java classloader,树形的java classloader,
💻 JAVA
字号:
package org.codehaus.classloader;

import java.io.File;
import java.io.FileFilter;
import java.lang.ref.WeakReference;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;

class FilesIterable {
  private final HashMap cache = new HashMap();
  private WeakReference baseref = null;
  private ClassProvider getBaseClassLoader(ClassLoaderManager man, final ClassLoader parent, 
      final URL[] base){
    ClassProvider result = getCachedBaseClassProvider();
    if(result == null){
      result = new ManagedURLClassLoader(man, base, parent);
      baseref = new WeakReference(result);
    }
    return result;
  }
  private ClassProvider getCachedBaseClassProvider(){
    if(baseref == null) return null;
    return (ClassProvider)baseref.get();
  }
  private ClassProvider getCachedClassProvider(File key){
    final WeakReference ref = (WeakReference)cache.get(key);
    if(ref==null) return null;
    return (ClassProvider)ref.get();
  }
  private void cacheClassLoader(File key, ClassProvider provider){
    cache.put(key, new WeakReference(provider));
  }
  Iterator iterateFiles(final ClassLoaderManager man, final ClassLoader parent, 
      final URL[] base, final File[] files, final FileFilter filter) {
    return new Iterator(){
      private int at = (base==null||base.length==0)?0:-1;
      public boolean hasNext() {
        return at<files.length;
      }
      public Object next() {
        synchronized(cache){
          if(!hasNext()){
            throw new NoSuchElementException();
          }
          if(at==-1){
            at = 0;
            return getBaseClassLoader(man, parent, base);
          }
          final File file = files[at++];
          ClassProvider cur = getCachedClassProvider(file);
          if(file.isDirectory()){
            if(cur==null){
              cur = new FileTreeClassLoaderManager(man, parent, null, file, filter);
              cacheClassLoader(file, cur);
            }
          }
          else{
            if(cur == null || ((ManagedFileClassLoader)cur).getTimestamp() < file.lastModified()){
              cur = new ManagedFileClassLoader(man, file, parent);
              cacheClassLoader(file, cur);
            }
          }
          return cur;
        }
      }
      public void remove() {
        throw new UnsupportedOperationException();
      }
    };
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -