2014-01-15 24 views
0

我来到一个交叉验证码:类或接口中的Java泛型 - 它们如何帮助我?

public interface IOAttack<Client> { 
    public void attack(Client c, Client victim); 
    public void delayedHit(Client c, Client victim); 
} 

public class PlayerVictim implements AttackInterface<Client> { 

@Override 
public void attack(Client client, Client victim) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void delayedHit(Client client, Client victim) { 
    // TODO Auto-generated method stub 

} 

} 

什么是增加了接口的目的是什么?我读了泛型和所有的数组,列表,hashmaps等,但我不明白为什么他们在那里,究竟是什么,他们的目的是什么。

这个通用如何帮助我?

+0

您是否阅读过教程?推荐阅读:http://docs.oracle.com/javase/tutorial/java/generics/ –

+0

我认为这个例子有误导性。 'IOAttack '更合理,但仍不能解释为什么在这里选择泛型而不是简单地从'SomeInterface'继承。 –

回答

0

这个想法是,一般来说,您的通用类型不会像您的示例中那样是<Client>,而是像<E><? extends SomeClass>这样的不存在的类。然后在你的整个实现中,你可以参考这个“临时”类型E,就好像它在哪里一个真正的类。然后,您可以重新使用适用的所有参数类型E

0

泛型可以帮助限制API的用户将错误的类型放入类/集合中。

public interface IOAttack<Client> { 
     public void attack(Client c, Client victim); 
     public void delayedHit(Client c, Client victim); 
    } 

我也看不到的效用,但如果更改客户端T或T延伸客户端,那么这个接口的实现者将能够使用这个接口与任何:

在你的榜样

键入或仅扩展(或实现)客户端的类型。

例如:

public interface IOAttack<T> { 
     public void attack(T victim); 
     public void delayedHit(T victim); 
    } 

,我们可以做到以下几点:

public class PlayerVictim implements IOAttack<Dog> { 

@Override public void attack(Dog victim) { // TODO Auto-generated method stub 

} 

@Override public void delayedHit(Dog victim) { // TODO Auto-generated method stub 

} 

public class PlayerVictim implements IOAttack<Player> { 

@Override public void attack(Player victim) { // TODO Auto-generated method stub 

} 

@Override public void delayedHit(Player victim) { // TODO Auto-generated method stub 

} 

泛型是一种强有力的方式来创建类,照顾到许多不同的类型。