2011-08-15 10 views
0

これは決まったクラスであり、確定的なインターフェースを実装するために、どのタイプが引数を定義していますか?私は<を使用しています。T extends MyBaseClass & MyInterface >引数の型はメソッド定義にありますが、MyBaseClass、MyBaseClass型のISは継承しません。 私が受け取った引数がMyBaseClass型であり、MyInterfaceを実装していることを確認します。どのような種類の型を定義クラスの引数を定義し、決定的なインターフェイスを実装しますか?

+3

hmmmm ...何ですか? :| – amit

+0

私は、あなたが何を持っているかを判断しようとすることに対して反対を勧めます。インターフェースや抽象基底クラスを持つことの大きな利点の1つは、あなたが持つクラスの詳細を知る必要はないということです。インターフェイスで指定されたメソッドを呼び出すことができるだけで、インターフェイスによって指定されたコントラクトを実行すると信じているので、あなたのために機能します。どのクラスが渡されたのかを正確に知る必要がある場合は、おそらくデザインに何か問題があったでしょう。 – corsiKa

答えて

1

できません。あなたは引数が特定の具体的な型であることを要求します(そして、そのサブクラスも許可されていることを意味します)。

ジェネリックでは、サブタイプが許可されていないなど、1つ以上の型で引数をパラメータ化することができますが、それはあなたの質問には関係しません。

ただし、体内でinstanceofを使用したり、arg.getClass()と比較したりすることはできます。私はあなたがこのような何かを行うことができれば、あなたが求めていることを前提とするつもりだ

-1

-

public <T extends YourBaseClass, YourInterface> void foo(T bar) { 

答えはイエスである、することができます。 YourBaseClassであるが、YourInterfaceを実装していないこのメソッドに引数を渡すと、コードはコンパイルされません。

+0

おかげで、完璧に動作します –

+0

@Carlos Correa - どうぞよろしくお願いします。 – Kal

関連する問題