关于Java泛型,我有一个"奇怪"的问题.
首先我列出我的代码:
Service.class
package jse.generics.service;
public interface Service {
}
Run Code Online (Sandbox Code Playgroud)
ServiceProvider.class
package jse.generics.service;
public interface ServiceProvider<T extends Service> {
public T getService();
}
Run Code Online (Sandbox Code Playgroud)
ServiceProviderRegistry.class
package jse.generics.service;
import java.util.HashMap;
import java.util.Map;
public class ServiceProviderRegistry<T extends Service> {
private Map<Class<T>, ServiceProvider<T>> map = new HashMap<Class<T>, ServiceProvider<T>>();
public void register(Class<T> clazz, ServiceProvider<T> provider) {
map.put(clazz, provider);
}
}
Run Code Online (Sandbox Code Playgroud)
FooService.class
package jse.generics.service;
public class FooService implements Service {
}
Run Code Online (Sandbox Code Playgroud)
FooServiceProvider.class
package jse.generics.service;
public class FooServiceProvider implements ServiceProvider<FooService> {
@Override
public FooService getService() {
return …Run Code Online (Sandbox Code Playgroud) 我是一个 Groovy 新手。当我运行以下脚本时,Groovy 报告“没有这样的属性:类 *** 的 tailFactorial”。闭包不应该访问局部变量 tailFactorial 吗?
def factorial(int factorialFor) {
def tailFactorial = { int number, BigInteger theFactorial = 1 ->
number == 1 ? theFactorial :
tailFactorial.trampoline(number - 1, number * theFactorial)
}.trampoline()
tailFactorial(factorialFor)
}
println "factorial of 5 is ${factorial(5)}"
println "Number of bits in the result is ${factorial(5000).bitCount()}"
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,如果我将上面的代码更改为以下代码:
def factorial(int factorialFor) {
def tailFactorial
tailFactorial = { int number, BigInteger theFactorial = 1 ->
number == 1 ? theFactorial :
tailFactorial.trampoline(number - 1, …Run Code Online (Sandbox Code Playgroud)