クラスの依存を減らすために、いくつかのクラスを拡張し、インターフェースを実装するコンストラクターにパラメーターを送信します(ジェネリッククラスを使用)。
public interface SomeInterface{
public void someMethod();
}
public class MyFragment extends Fragment implements SomeInterface{
//implementation
}
//here is classs, that I need to create. T must extend Fragment and implements
//SomeInterface. But, I'm afraid, if I'll use MyFragment directly, it will create a
//dependence of SomeClass from MyFragment.
public class SomeClass /*generic?*/ {
public SomeClass(T parent);
}
出来ますか?
さらに、Tクラスを使用して、コンテキストとしてT.getActivity()を使用してビューを作成します。
Tはフラグメントを拡張し、SomeInterfaceを実装する必要があります
その場合、SomeClass
を次のように宣言できます。
_public class SomeClass<T extends Fragment & SomeInterface>
_
それには、T
型を拡張し、Fragment
を実装するためにSomeInterface
型のオブジェクトが必要です。
さらに、Tクラスを使用して、コンテキストとしてT.getActivity()を使用してビューを作成します。
私はAndroidに不慣れですが、getActivity()
がFragment
で宣言されたパブリックインスタンスメソッドである場合、T
のインスタンスで呼び出すことができます。コンパイラは、すべてのT
sがそのメソッドを継承する必要があることを認識します。
このようなことをしたいですか?
class SomeClass {}
interface SomeInterface{
public void someMethod();
}
class AGenericClass<T> extends SomeClass implements SomeInterface {
public void someMethod() {}
}
これは許可されています。
しかし、Androidあなたの質問に固有のものは何ですか?私は何かが足りないと思うので、さらに詳細を提供できますか?
以下を更新
私はあなたが何をしたいのかまだ完全にはわかりませんし、依存関係をすぐに心配する必要があるかもわかりませんが、これは合法でもあります bounded type parameters :
interface SomeInterface{
public void someMethod();
}
class Fragment {
public void aMethodInFragment() { }
}
public class SomeClass <T extends Fragment & SomeInterface> {
public SomeClass(T parent) {
parent.someMethod();
parent.aMethodInFragment();
}
}
型パラメーター<T extends Fragment & SomeInterface>
は、T
がFragment
のサブクラスであり、SomeInterface
を実装することを指定します。
Fragmentを拡張し、インターフェイスを実装しているタイプTを持つように修正すると理解していただければ簡単です。だから、あなたはそのような何かを書かなければなりません。
abstract class TemplateFragment extends Fragment implements SomeInterface{}
そして、あなたのクラスで
class SomeClass<T extends TemplateFragment> {
...
}
トリックを行います。