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)); } }