下面对getHighest()和getLowest()的调用返回Comparable类型的对象,而不是T类型的对象,这正是我们想要的。为什么,我该如何改进这段代码,使这些调用返回T(这样T的字段和方法就可用了)?
public class HighestLowest<T extends Comparable<T> > {
private T lowest;
private T highest;
public static void main(String[] args) {
HighestLowest city;
HighestLowest employee;
City[] cities = new City[3];
Employee[] employees = new Employee[3];
city = new HighestLowest<City>(cities);
employee = new HighestLowest<Employee>(employees);
下一行生成编译器错误:
错误:找不到符号符号:方法getName()位置:接口java.lang.Comparable
我想employee.getHighest()返回一个员工(而不仅仅是一个比较),同时仍然使用泛型类/方法机制,但是怎么做呢?
System.out.println("The oldest employee is: " +
employee.getHighest());
}
public T getLowest() {
return lowest;
}
public T getHighest() {
return highest;
}
public HighestLowest(T[] of) {
lowest = lowest(of);
highest = highest(of);
}
private T lowest(T[] of) {
T lowest = of[0];
for (T element : of) {
if (element.compareTo(lowest) < 0) {
lowest = element;
}
}
return lowest;
}
private T highest(T[] of) {
T highest = of[0];
for(T element : of) {
if (element.compareTo(highest) > 0) {
highest = element;
}
}
return highest;
}
}
class Employee implements Comparable<Employee> {
// ...
}
class City implements Comparable<City> {
// ...
}
您的< code>employee变量被声明为原始类型< code>HighestLowest。然后,编译器只知道它的< code>Comparable界限。编译器不知道您在运行时分配了泛型类型。
解决方案:将其声明为泛型类型< code > HighestLowest
问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的
我正在实现我自己的泛型链表类,它有一个名为的实例方法,该方法生成链表的数组副本并返回它。然而,每当我试图在实例上调用该方法时,我总是得到错误消息“sllist.this cannot be referenced from a static context”。我搜索了一下,有些人说这是因为我没有在实例上调用那个方法,但我确实调用了。 下面是类: 它有一些方法,如,它们都没有问题。 是我不断收到错误消
Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?
问题内容: 为什么以下代码会编译?该方法返回该类型或其子类的实例。类中的代码调用该方法。编译器允许将返回值存储到类型的变量(显然不在的层次结构中)。 即使在擦除类型之后, 返回类型也不应该仍然是的实例 吗? 该方法的字节码为: 编辑:一致地替换为。 问题答案: 这实际上是合法的类型推断*。 我们可以将其简化为以下示例(Ideone): 因为是接口,所以允许编译器推断(无意义的,实际上是)交集类型。
我正在实现我自己的通用链表类,它有一个名为的实例方法,它可以制作链表的数组副本并返回它。但是,每当我尝试在实例上调用该方法时,我都会收到错误消息“SLList.this不能从静态上下文中引用”。我搜索了一下,有些人说这是因为我没有在实例上调用该方法,但我确实调用了。 下面是该类: 它有一些方法,比如<code>addLast、addFirst</code>它们没有问题。 是我不断收到错误消息的行,
我想让一个函数返回一个保证实现两个接口的对象。编译时不一定知道确切的对象。我的代码看起来像: 在尝试编译时,我遇到以下错误: 你好世界java:13:错误:不兼容的类型:C无法转换为T 返回新的C() ^ 其中T是一个类型变量: T扩展了方法f(布尔值) HelloWorld中声明的a,B。java:14:错误:不兼容的类型:D无法转换为T 返回新的D() ^ 其中T是一个类型变量: T扩展了方法