2013-01-12 47 views
-4

我给了Pair.java类并且必须实现PairTools.java类。java泛型中的通配符

Pair.java

import java.util.Objects; 

public class Pair<A, B> { 

    public final A a; 
    public final B b; 

    public Pair(A a, B b) { 
     this.a = a; 
     this.b = b; 
    } 

    @Override 
    public String toString() { 
     // appending things to the empty string prevents us from having to worry about null 
     // and calling toString explicitly, Objects.toString(a) + " " + Objects.toString(b) 
     // would also work 
     return "" + a + " " + b; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     // `obj instanceof Pair` will automatically return false if obj is null 
     if (!(obj instanceof Pair)) { 
      return false; 
     } 

     // some warnings with generics are unavoidable 
     @SuppressWarnings("unchecked") 
     Pair<A, B> p = (Pair<A, B>) obj; 

     // we use Objects.equals() to handle nulls easily 
     return Objects.equals(a, p.a) && Objects.equals(b, p.b); 
    } 

    @Override 
    public int hashCode() { 
     // we use Objects.hashCode() to handle nulls easily, 
     // the operation^is XOR, not exponentiation 
     return Objects.hashCode(a)^Objects.hashCode(b); 
    } 
} 

在PairTools.java我要实现以下方法:

public class PairTools { 

    /** 
    * this is how you can use wildcards in generics 
    * 
    * @param pair (assume never null) 
    * @return a pair containing two references to a of the given pair 
    */ 
    public static <A> Pair<A, A> copyA(Pair<A, ?> pair) { 
     return null; 
    } 

} 

我不明白的实现。我需要一个解释。

+0

你需要更具体。 **,具体**,你不明白吗? –

+0

import java.util.Objects;我可否知道你使用哪个jdk? – vels4j

+0

什么是java.util.Objects? – partlov

回答

0

一个可能的实现可能看起来像这样。

public class PairTools { 

    /** 
    * this is how you can use wildcards in generics 
    * 
    * @param pair (assume never null) 
    * @return a pair containing two references to a of the given pair 
    */ 
    public static <A> Pair<A, A> copyA(Pair<A, ?> pair) { 
     return new Pair<A, A>(pair.a, pair.a); 
    } 

} 

这忽略了一对给定的b值,并返回一个新的对与两个引用a

你不能简单地做到这一点

return new Pair<A, A>(pair.a, pair.b); 

,因为你必须返回一个Pair<A, A>。您得到一个Pair<A, ?>作为参数,因此您只能确定给定对的第一个值是类型A。你不知道pair.b的类型。