第一部分
是有可能[...]
不是你尝试它的方式。编译时间和运行时间会造成混淆,例如:
- 泛型是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通过创建该接口类型的匿名类。 –