2011-10-21 38 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

我认为你的第二课“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)'不会被编译。你的意思是“(F f)'。 –

+0

@CameronSkinner嗨!谢谢 - 现在修正了(我只是在这里写代码而不用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接口以通用的方式,然后你可以有任何你需要的实现。

相关问题