Tag: 类型推理

类型推断:Java 7类型参数

今天我们谈到了Java 7在我们公司的优势。 从Java 7开始,可以定义以下行 Map<String, List> myMap = new HashMap<String, List>(); 如 Map<String, List> myMap = new HashMap(); 我们对上述主题进行了长时间的讨论。 我们中的一些人认为这是类型推断(如C#中的var关键字),并且类型将在运行时计算,其他人认为它只是一种更简单的方式来声明某个变量并且没有推断,因为已知类型在编译时的上下文。 请提供澄清。 技术如何运作? 编辑:官方Oracle文档没有提供有关该文档的精确文档。 http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

为什么要将Class 的类转换为不安全?

我正在创建一个MethodPointer类,以模拟来自C ++的函数指针的function。 起初,我只使用Object s做了所有事情,但后来我有了一个想法 – 为什么不让它真正通用? 这个问题出现在这个构造函数中,它尝试使用签名MethodPointer(Class clazz, String methodName, Class … paramClasses)调用另一个构造函数: public MethodPointer(T object, String methodName, Class … paramClasses) { this(object.getClass(), methodName, paramClasses); this.object = object; } 我认为这可以正常工作,但我收到以下编译器错误: The constructor MethodPointer(Class, String, Class[]) is undefined 所以,困惑,我这样做了: public MethodPointer(T object, String methodName, Class … paramClasses) { this((Class) object.getClass(), methodName, paramClasses); this.object = object; } […]

类型推断的差异JDK8 javac / Eclipse Luna?

我正在尝试将项目切换到Java8,并遇到Eclipse Luna和javac类型推断之间的奇怪差异。 使用JDK 1.7.0_65 javac,这段代码编译得很好。 JDK 1.8.0_11抱怨toString(char [])和toString(Throwable)都匹配“toString(getKey(code,null));” 线。 Eclipse Luna 4.4(I20140606-1215)使用JDK快乐地编译它: public class TypeInferenceTest { public static String toString(Object obj) { return “”; } public static String toString(char[] ca) { return “”; } public static String toString(Throwable t) { return “”; } public static U getKey(Object code, U defaultValue) { return defaultValue; } public […]

不指定类型参数,不能将Java 8方法与lambda参数一起使用

我使用类型参数创建了一个方法,使用这些类型参数返回generics类型,并使用Function参数,这也取决于类型参数。 当我使用lambdas作为参数时,编译器强制我指定方法的类型参数,这感觉不对。 我正在设计一个实用程序类,其中包含与Stream.flatMap一起使用的方法。 它将每种集合条目映射到包含键和值元素的FlatEntry,并且可以使用构建器在多个级别上执行此操作。 受影响的方法是flatEntryMapperBuilder 。 这是代码: import java.util.function.Function; import java.util.stream.Stream; public class GdkStreams { public static Function<T, Stream<FlatEntry>> flatEntryMapper(Function keyMapper, Function<T, Stream> valueMapper) { return input -> { K key = keyMapper.apply(input); return valueMapper.apply(input).map(value -> new FlatEntry(key, value)); }; } public static FlatEntryMapperBuilder flatEntryMapperBuilder(Function keyMapper, Function<T, Stream> valueMapper) { return new FlatEntryMapperBuilder(keyMapper, valueMapper); } […]