Javagenerics – Java是否需要支持本地定义的类型?

我希望能在这里找到Java仿制药专家。 假设你有一些打字类:

public interface SomeClass { void doSomething(final T t); } 

在给定SomeClass的实例的情况下,还有一个函数可以获取T的实例:

 public static class Retriever { public  T get(final SomeClass c) { return null; // actual implementation left out } } 

现在假设您有一个SomeClass和一个检索器的集合:

 final List<SomeClass> myClasses = null; // actual implementation left out final Retriever myRetriever = null; // actual implementation left out 

我们无法执行以下操作:

 for (final SomeClass myClass : myClasses) { myClass.doSomething(myRetriever.get(myClass)); } 

现在我的问题是:Java是否需要支持才能在本地定义类型? 就像是:

  for (final SomeClass myClass : myClasses) { myClass.doSomething(myRetriever.get(myClass)); } 

这里,类型T的范围是for-loop。 我们定义T来摆脱通配符? 。 而已。 T的引入应该使我们能够编写如上所述的所需for循环。

FWIW,以下代码是一种解决方法。 我们正在推出一个function,仅用于转换?T

 for (final SomeClass myClass : myClasses) { workAround(myRetriever, myClass); } public static  void workAround(final Retriever myRetriever, final SomeClass myClass) { myClass.doSomething(myRetriever.get(myClass)); } 

本地定义的用户类型可能是更优雅的解决方案?

现在我的问题是:Java是否需要支持才能在本地定义类型?

否.type-parameter的最小范围是方法,即为了使for循环具有类型T ,您必须将封闭方法定义为generics或封闭类。 例如:

  void method(List myClasses) { for (final SomeClass myClass : myClasses) { myClass.doSomething(myRetriever.get(myClass)); } }