类或接口中的Java泛型 - 它们如何帮助我?

时间:2014-01-15 16:14:34

标签: java generics

我来了一个代码:

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

 }

}

添加到界面的目的是什么?我读到了关于泛型和所有,arraylists,hashmaps等的内容,但我无法理解为什么它们确切存在,它们的目的是什么。

这个通用怎么能帮助我?

2 个答案:

答案 0 :(得分:0)

通常,您的通用类型不会像示例中那样<Client>,而是像<E><? extends SomeClass>这样的不存在的类。然后在整个实现中,您可以引用此“临时”类型E,就像它是真正的类一样。然后,您可以对适合E

的所有参数类型重用您的实现

答案 1 :(得分:0)

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

在你的例子中

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

我也看不到该实用程序,但是如果您更改Client for T或T extends Client,那么此接口的实现者将能够将此接口用于任何类型或仅扩展(或实现)Client的那些类型

例如:

 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

 }

泛型是一种创建适用于许多不同类型的类的强大方法。