2013-07-17 59 views
0


有沒有人可以告訴我如何在函數「getDirectHair()」中編寫返回代碼?
我想創建一個方法,它就像Human類中的一個快捷方式,直接返回好類型的Hair類(下面名爲「h.getDirectHair()」),而不是使用「h.getPerson()。getHair() 」。
我想使用<?人<的>? >在Human類中聲明。Java,子類仿製藥的返回仿製藥

package test; 
public class Test { 
    public static void main(String[] args) { 
     Human<Bob> h = new Human<Bob>(); 
     Blond blond = h.getPerson().getHair(); // no cast needed, because Human<Bob> is blond 
     //how to do if I want to use directly this : 
     blond = (!!!) h.getDirectHair(); //need cast !! Blond or Brown ? 
    } 
} 
class Human<T extends Person<?>>{ 
    private T person = null; 
    public T getPerson() { 
     return person; 
    } 
    public /* <?> */ Object getDirectHair(){ 
     // => I want to return the type <?> of Person<?> 
     // instead of Object, how to ?? 
     return person.getHair(); 
    } 
} 
class Person<T extends Hair> { 
    T hair; 
    public Person(T hairr) { 
     hair = hairr; 
    } 
    public T getHair() { 
     return hair; 
    } 
} 
class Bob extends Person<Blond> { 
    public Bob(Blond bean) { 
     super(bean); 
    } 
    public Blond getHair() { 
     return super.getHair(); 
    } 
} 
class Barack extends Person<Brown> { 
    public Barack(Brown bean) { 
     super(bean); 
    } 
    public Brown getHair() { 
     return super.getHair(); 
    } 
} 
class Hair { 
} 
class Blond extends Hair { 
} 
class Brown extends Hair { 
} 


非常感謝和問候,
大衛。

+0

它的 「繼承人」,而不是 「發」,BTW :)。 –

+0

@TheTerribleSwiftTomato:如果您閱讀示例,請不要使用 – jalynn2

+0

@TheTerribleSwiftTomato我認爲Hair是正確的,因爲getHair會返回Blond和Brown –

回答

4

以下是如何來解決這個問題:

public class Test { 
    public static void main(String[] args) { 
     Human<Blond, Bob> h = new Human<Blond, Bob>(); 
     Blond blond = h.getPerson().getHair(); 
     blond = h.getDirectHair(); 
    } 
} 

class Human<H extends Hair, T extends Person<H>>{ 
    private T person = null; 
    public T getPerson() { 
     return person; 
    } 
    public H getDirectHair(){ 
     return person.getHair(); 
    } 
} 
+0

我想在現有的問題中,這是不可能的。我對嗎? –

+0

問題中的層次結構由我的解決方案保存。不同的是,人類有一個額外的泛型類型H. –

+0

是的我的意思是在現有的泛型使用。 –