2013-01-12 83 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的類型。