在自学Java时,我遇到了一个关于方法类型/返回类型的令人困惑的部分?
例如,
public <U> IList<U> map(IFunc<T, U> f) {
return new ConsList<U>(f.apply(this.first), this.rest.map(f));
}
它被称为类型参数表。它表示在该map
方法中表示的泛型类。我所说的泛型类是指任何你能想到的类。它可以是我的房子。java,MyCar。java
,字符串。java
等
IList
此代码在Java 8中编译,但在Java 7中编译失败: 它不能推断从映射返回的映射的具体类型。空(): 如果将调用更改为f(Map),则会编译。 但是如果您将调用更改为f(Map.empty())。放(1,“A”)。put(2,“B”)) ,它无法在Java 7和8上再次编译。为什么?
重排序方法:reverse()和sort()。 reverse 对数组进行反转操作 { let array = [1,2,3,4]; array.reverse()//array = [4,3,2,1] } sort 对数组进行排序 { let array = [1,2,5,10]; array.sort() console.log(array) }
我正在做一个体验,尝试用以下方式重写泛型类的方法: 为什么我不能?编译错误是 yGenFun。java:15:错误:对doX的引用不明确,Do中的方法doX(A)和MyGenFun中的方法doX(T)都匹配x.doX(“测试”);^其中A、T是类型变量:在类Do T中声明的extends对象扩展在类MyGenFun 1 error中声明的CharSequence 如果我注释“第1行”,我可以编译代
在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。
让我们考虑一个类:
我想这样设置参数的类型: 当我尝试这样做时,会引发错误:NameError:名称'Tree'未定义