2011-10-21 3 views
2

ジェネリックを使ってクラスを別のクラスに変換したいとします。それをしてもいいですか?Javaジェネリックを使用して、Javaで同じインタフェースの異なる実装を使用することはできますか?

たとえば、

Class BConvertImpl implements Converter 
{ 
    A toA(Class B); 
    void update(Class A, Class B); 
} 

Class CConverterImpl implements Converter 
{ 
    A toA(Class C); 
    void update(Class A, Class C); 
} 

これを実装するためにジェネリックを使用できますか?

私はジェネリックスをJavaで使い慣れています。誰かがこれで私を助けることができますか?

ありがとうございます。

+0

私は、あなたが "コンバータ"を意図している2番目のクラス "Comverter"にタイプミスがあると思います。私はあなたの質問に意図的で関連性があるかもしれないから*変更するつもりはありません。 – ObscureRobot

+0

申し訳ありません。それは確かにタイプミスでした。 – coderC

答えて

4

はい:あなたのConverterクラスを入力します(単にto方法に名前を付ける)する必要があります。

/** 
* @param <F> The "from" type 
* @param <T> The "to" type 
*/ 
interface Converter<F, T> { 

    T to(F from); 

    void update(T to, F from); 
} 

class BConvertImpl implements Converter<B, A> { 

    A to(B from) { /* some impl */ } 

    void update(A to, B from) { /* some impl */ } 
} 

class CConverterImpl implements Converter<C, A> { 

    A to(C from) { /* some impl */ } 

    void update(A to, C from) { /* some impl */ } 
} 
+0

これは書かれたとおりには動作しません。 'F'と' T'は型名ではなく、 'to(Class F)'はコンパイルされません。あなたは 'to(F f)'を意味します。 –

+0

@CameronSkinner Yikes!ありがとうございました - 今修正されました(IDEを使用せずにここにコードを書いてください - doh!)。 – Bohemian

0

いいえできません。このように、または他の方法でJavaでクラスを変換することはできません。何をすることができるかは、Converterのいずれかを受け入れるハンドラを作成することです。これはあなたが達成しようとしているものよりもはるかです。

+0

-1私はこれをdownvoteする必要があります。それを回避することはありません...この答えは単に間違っています。 – Bohemian

2

あなたはこのような何か行うことができます。

interface Converter<From, To> { 
    public To convert(From object); 
} 

class BConverter implements Converter<B, A> { 
    public A convert(B b) { 
     ... 
    } 
} 

class CConverter implements Converter<C, A> { 
    public A convert(C c) { 
     ... 
    } 
} 

をこれは、あなたがConverterインタフェースを定義することができます汎用的な方法で実装し、必要な実装をすべて実装することができます。

関連する問題