Tag: 具体化

为什么Function.identity()会破坏类型设置,但t – > t不会?

在Java 8 lambdas,Function.identity()或t-> t中找到的答案似乎暗示Function.identity()几乎总是等于t -> t 。 但是,在下面看到的测试用例中,用Function.identity()替换t -> t导致编译器错误。 这是为什么? public class Testcase { public static Collector comparatorOrdering( Function keyMapper, Function valueMapper, Comparator keyComparator, Comparator valueComparator) { return null; } public static void main(String[] args) { Map case1 = Stream.of(1, 2, 3). collect(comparatorOrdering(t -> t, t -> String.valueOf(t), Comparator.naturalOrder(), Comparator.naturalOrder())); Map case2 = Stream.of(1, […]

转换为在运行时确定的类

我有一个方法fetchObjects(String) ,期望返回一个Contract业务对象数组。 className参数告诉我应该返回什么样的业务对象(当然这在这个解释的情况下没有意义,因为我已经说过我将返回Contract s,但它基本上是我在实际场景中的情况)。 所以我从某处获取了一组条目并加载了集合条目的类(其类型由className指定)。 现在我需要构造要返回的数组,所以我使用Set的toArray(T[])方法。 使用reflection,我构建了一个空的Contracts数组。 但是,这给了我静态类型Object的值! 接下来我需要将它转换为适当的类型,在本例中是Contract[] (参见下面列表中的“带星号 – 下划线”部分)。 我的问题是:有没有办法,如何,如同在列表中那样转换为Contract[] , 但只通过className (或entriesType ) 确定数组元素的类型( Contract )? 换句话说,我想做的基本上是这样的: (entriesType[]) valueWithStaticTypeObject ,其中entriesType被classname参数指定的classname替换,即Contract 。 这在某种程度上是不可能的,还是可以以某种方式完成? 也许使用generics? package xx.testcode; import java.util.HashSet; import java.util.Set; class TypedArrayReflection { public static void main(String[] args) { try { Contract[] contracts = fetchObjects(“Contract”); System.out.println(contracts.length); } catch (ClassNotFoundException e) {} } […]

关于Java中具体化generics的任何一个词?

我知道这个问题可能会引发更多的讨论,而不是具体的答案(我知道这不是更好)。 但是最近甲骨文的收购,我想知道是否有任何消息表明Java可能(有一天)会得到具体的仿制药? 我听说甲骨文希望给Java带来一些提升,我认为没有更好的方法。