2017-09-16 7 views
1

私がしようとしているのは、他の "サブリスト"からすべての変更を反映させるバッキングリストです。もっと手の込んだように、私がやろうとしていることは次のとおりです。リストの変更を別のリストに反映するにはどうすればよいですか?

public abstract class User 
{ 

    protected List<UserHandler> defaultHandlers 
} 

public class Customer extends User 
{ 

    // All changes made to this list should the one from the parent class 
    private List<CustomerHandler> userHandlers 
} 

public class Admin extends User 
{ 

    // Similarily with this one 
    private List<AdminHandler> adminHandlers 
} 

public interface UserHandler 
public interface CustomerHandler extends UserHandler 
public interface AdminHandler extends UserHandler 

このような機能も可能ですか?

+0

私はこれに通常の 'ArrayList'を使うことができると思います。それを試しましたか? – markspace

+1

あなたが望むならば、あなた自身の 'List'の実装を作成することでこれを行うことができます。 –

+0

[ArrayList Java doc:](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#subList-int-int-)から返されるリストには、このリストは返されたリストの非構造的な変更がこのリストに反映され、その逆も同様です。あなたの要求に合っているようです。 – markspace

答えて

1

明らかに答えは、とAdminにはprotectedに設定されているので、defaultHandlersを使用するだけです。

defaultHandlersを変更するサブリストdefaultHandlersを探している場合は、List#subListを使用できます。そのdocumentationから:

List<E> subList(int fromIndex, int toIndex)

指定したfromIndex、包括的、かつ排他的toIndexの、間のこのリストの部分のビューを返します。 fromIndexとtoIndexが等しい場合、返されるリストは空です。返されるリストはこのリストによってサポートされるため、返されるリストの非構造的な変更はこのリストに反映され、その逆もあります。返されるリストは、このリストでサポートされるすべてのオプションのリスト操作をサポートします。

プログラムがマルチスレッドの場合は、同期を処理する必要があります。

関連する問題