第一部分
是有可能[...]
不是你嘗試它的方式。編譯時間和運行時間會造成混淆,例如:
- 泛型是Java中的純編譯時概念。實際上,編譯期間刪除了泛型(稱爲type erasure)。它只存在於編譯前給你類型安全,也就是說寫入你的代碼。
- 但實例
type
僅在運行時分配。而且因爲在編譯期間你不知道它的類型,所以你必須使用wildcard generic。所以你只知道類型,當你執行你的代碼。
所以你可以看到,你不能使用,而執行您的代碼,以幫助您寫它,你收集到的信息。
我強烈建議你閱讀Oracle的tutorial on generics。
第二部分
將我需要寫出來的每一個人類情況的方法是什麼?
我與Paul在此。我相信我們可以幫助你,但你應該給我們一個你想要完成的事情的想法。
...基於您的評論
,我認爲以下將是一個很好的解決方案。
您的現實模型由大洲,國家和城市組成。因此,您應該有Continent
,Country
和City
類。既然你正在建模人口,他們都應該有一個方法getPopulation()
。這是他們共同的一件事情;所有這些東西都是人口稠密的。爲解決這一共同的結構方式/ Java中的行爲是創建一個接口(姑且稱之爲Populated
)用方法getPopulation()
並擁有所有這些類的實現:
public interface Populated {
int getPopulation();
}
public class Country implements Populated {
@Override
public int getPopulation() {
...
}
}
// same for Continent and City
現在你有三個班,但他們可以所有人都被視爲一件事,因爲人口衆多。例如,你可以收集他們的列表:
List<Populated> populated = new ArrayList<>();
populated.add(new Country());
populated.add(new City());
...
而這個列表可以與工程的Populated
實例比較排序:
public class PopulationComparator implements Comparator<Populated> {
public int compare(Populated left, Populated right) {
return left.getPopulation() - right.getPopultion();
}
}
你能解釋這裏的大問題?你試圖做的事情不會奏效,但目前還不清楚爲什麼你需要這樣做。 –
比較器是Interface,所以你如何在這裏創建對象。 – Devavrata
@Neuron通過創建該接口類型的匿名類。 –