Java 使用<;T>;父类中未定义的方法
我有一个方法如下Java 使用<;T>;父类中未定义的方法,java,generics,inheritance,extends,Java,Generics,Inheritance,Extends,我有一个方法如下 private <T extends GenericObject>void printStatus(final T result) { System.out.println("Status", result.getStatus()); System.out.println("GenericStatus", result.getGenericStatus()); System.out.println(&q
private <T extends GenericObject>void printStatus(final T result) {
System.out.println("Status", result.getStatus());
System.out.println("GenericStatus", result.getGenericStatus());
System.out.println("GenericMessage", result.getGenericMessage());
}
问题是结果。printStatus中的getstatus()给出编译错误。在printStatus方法中解决此问题的最简单方法是什么而不重构大量代码?一种方法是将
getStatus
的声明推送到generiobject
类:
公共类GenericObject{
公共抽象对象getStatus();
//其他方法。。。
}
其他类不必更改,因为允许子类专门化父方法的返回类型。当
t
仅在一个位置出现时,在t
中使方法泛型是没有意义的。相反,您可以只写:
private void printStatus(GenericObject result) { ... }
类型变量仅在出现在多个位置时才会增加值,例如:
<T> T choose(boolean condition, T ifTrue, T ifFalse) {
return condition ? ifTrue : ifFalse;
}
T选择(布尔条件,如果真,如果真){
返回条件?如果是:如果是;
}
或
List toList(Set){…}
因为它们表示多个参数之间或参数和返回之间的实际约束。使GenericObject成为抽象类。它清楚地符合你的要求。请格式化你的帖子。坦率地说,我发现很难解析语法和类的方法名。很难读懂。对于声明零类型参数的类来说,名称
generiobject
不是一个误称吗?
<T> T choose(boolean condition, T ifTrue, T ifFalse) {
return condition ? ifTrue : ifFalse;
}
<T> List<T> toList(Set<T> set) { ... }