2013-11-28 5 views
0

그래서 내가 사용하고있는 제네릭 풀이 있는데 실제로 초기화에서 무슨 일이 일어 났는지 궁금합니다. 선생님을 만들어 풀에 그것을 사용하면됩니까? 만약 그렇다면 어떤 비용이 듭니까?일반 클래스 - Java에서 초기화

final Pool<Teacher> pool = new Teacher(); 

주 : 수영장은 추상 클래스 & 교사가 사전에 풀을 감사를 연장!

여기에 풀 클래스의 다음 Pool 가정

public abstract class ObjectPool<T> { 
private long expirationTime; 

private Hashtable<T, Long> locked, unlocked; 

public ObjectPool() { 
expirationTime = 30000; // 30 seconds 
locked = new Hashtable<T, Long>(); 
unlocked = new Hashtable<T, Long>(); 
} 

protected abstract T create(); 

public abstract boolean validate(T o); 

public abstract void expire(T o); 

public synchronized T checkOut() { 
long now = System.currentTimeMillis(); 
T t; 
if (unlocked.size() > 0) { 
    Enumeration<T> e = unlocked.keys(); 
    while (e.hasMoreElements()) { 
    t = e.nextElement(); 
    if ((now - unlocked.get(t)) > expirationTime) { 
     // object has expired 
     unlocked.remove(t); 
     expire(t); 
     t = null; 
    } else { 
     if (validate(t)) { 
     unlocked.remove(t); 
     locked.put(t, now); 
     return (t); 
     } else { 
     // object failed validation 
     unlocked.remove(t); 
     expire(t); 
     t = null; 
     } 
    } 
    } 
} 
// no objects available, create a new one 
t = create(); 
locked.put(t, now); 
return (t); 
} 

public synchronized void checkIn(T t) { 
locked.remove(t); 
unlocked.put(t, System.currentTimeMillis()); 
} 
} 
+2

'교사'가 '풀'(또는 구현 도구)을 확장하지 않으면 작동하지 않습니다. – Justin

+0

이 코드가 컴파일됩니까? 수업은 어떻게 보이나요? –

+0

교사가 수영장을 확장하고 추상적 인 방법을 구현하는 한, 컴파일하고 잘 실행됩니다. – user1861156

답변

2

개체를 저장하는 데이터 구조입니다, 당신은 아마 당신은 수영장이있는 경우 교사는이 곳 Pool 대신

final Pool<Teacher> pool = new Pool<>(); 

을 초기화 할 여하튼 그것을 확장하기 위해, 다소 어색하고 불필요하게 보인다.

편집 :

업데이트 된 질문을 바탕으로, 나는 풀 (관리자) 클래스와 객체가 구현하는 것이 풀 인터페이스로 비트를 클래스를 분리 말할 것입니다. 그런 다음 일반 수업의 경우 :

public class Pool<T extends PoolObject> {//... 

그리고 거기에서 일반 PoolObjects로 작업 할 수 있으며 교사는 직접 풀을 구현/확장하지 않습니다.

+0

나는 그것이 어색하다는 데 동의하지만 'pool'은 추상 메소드를 포함합니다. – user1861156

+0

'Pool' 클래스를 보여줄 수 있습니까? – Rogue

+0

그래, 이제 그 짓을 했어. – user1861156