?? filesiterable.java
字號(hào):
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();
}
};
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -