2011-12-05 8 views
0

私はReentrantReadWriteLockを持っています。 ReentrantReadWriteLockには、ReadLockとWriteLockがサブクラスとして含まれています。ReentrantReadWriteLock ReadLockとWriteLockの上にラッパーを作成する方法

I want to extend this ReadLock and WriteLock by my custom classes as 

DummyReadLock and DummyWriteLock. 

その後、私は

final Lock lock = new DummyReadLock.readLock(); 

または

final Lock lock = new DummyWriteLock.writeLock(); 

以下のような何かを行うことができなければなりませんが、これを達成することが可能ですか。?

+2

あなたの質問は私にはあまり意味がありません。 'DummyReadLock'が' ReentrantReadWriteLock.ReadLock'を拡張している場合、 'readLock()'メソッドが必要なのはなぜですか?あなたがしたいことは、 'ReentrantReadWriteLock'、*を拡張する' DummyReadWriteLock'クラスと 'ReentrantReadWriteLock.ReadLock'を拡張する' DummyReadWriteLock.ReadLock'(と同様に書き込みロック)を作成することだと思います。また、用語のポイント:それらは "サブクラス"ではなく "ネストされたクラス"です。 「サブクラス」は、継承を使用して他のクラスを拡張するクラスを指します。 – ruakh

+0

どうすれば作成できますか? –

答えて

0

あなたのことができます:

class DummyReadLock extends ReentrantReadWriteLock.ReadLock { 

    private ReentrantReadWriteLock.ReadLock readLock; 

    // inherited constructor 
    protected DummyRLock(ReentrantReadWriteLock rwlock) { 
     super(rwlock); 
     this.readLock = rwlock.readLock(); 
    } 

    public ReentrantReadWriteLock.ReadLock readLock() { 
     return readLock; 
    }  
} 
+0

DummyReentrantReadWriteLockを拡張する方法..? –

+0

私は分かりません。 ReentrantReadWriteLock内でReadLockを拡張したかったとおっしゃいました。 – Tudor

0

はい、それは一種の可能なはずです。私はあなたがこれをやりたい理由は確かではありませんが、以下のコードは、例えばReadLockを拡張します。 ReadLockのコンストラクタは、パラメータとしてReentrantReadWriteLockを必要とするので、あなたはあなたの例に示されているとおりに正確にそれを呼び出すことができないことを

public class DummyReadLock extends ReentrantReadWriteLock.ReadLock 
{ 
    public DummyReadLock(ReentrantReadWriteLock arg0) 
    { 
    super(arg0); 
    } 
} 

注意。

関連する問題