Tag: 类型 擦除

方法重载时重复的方法

以下代码提供编译错误,错误“重复方法” static int test(int i){ return 1; } static String test(int i){ return “abc”; } 这是预期的,因为重载方法具有相同的签名并且仅在返回类型方面不同。 但是下面的代码编译好了警告: static int test1(List l){ return 1; } static String test1(List l){ return “abc”; } 因为,我们知道Java Generics在Erasure上运行,这意味着在字节码中,这两种方法具有完全相同的签名,并且与返回类型不同。 更令我惊讶的是,以下代码再次出现编译错误: static int test1(List l){ return 1; } static String test1(List l){ return “abc”; } 如果有重复的方法,第二个代码如何正常工作而不会给出任何编译错误?

Erasure类型的丑陋头脑,如何规避?

所以我有这个界面 public interface EventHandler { public void handleEvent(E event); } 我想为它处理处理事件的类,如下所示: public class WorkingHandler implements EventHandler { public void handleEvent(MouseEvent event) { //handle event } } 以上示例工作正常。 但是编译器不会让我多次实现EventHandler,因为类型擦除非常令人沮丧。 public class NotWorkingHandler implements EventHandler, EventHandler { public void handleEvent(MouseEvent event) { //handle mouse event } public void handleEvent(KeyEvent event) { //handle key event } } 几个问题…… […]

类型擦除:Java与C#

可能重复: C#vs Javagenerics Java使用Type erasure而C#在运行时保留类型信息,这种设计语言行为的实际差异是什么?

Java Generics:在运行时访问Generic Type

我想在运行时访问声明字段的generics类型。 我之前的印象是,由于Java类型擦除,这是不可能的。 但是,情况并非如此,因为一些众所周知的框架在运行时通过reflection来利用generics类型。 例如,Guice将根据您提供的generics类型实现Provider: public class Injectable{ @Inject private Provider someTypeProvider; } 如何通过reflectionAPI访问字段的“SomeType”generics属性或任何此类类型/方法/等? 此外,了解如何通过Java 6 Annotation Processor API访问这些generics类型属性也很有帮助。 谢谢。 编辑: 谢谢大家的指示。 我找到了一种方法,使用haylem的链接,特别是Prenkov的文章Java Reflection:Generics 。 这是我正在寻找的答案: /** * @author John Ericksen */ public class TypeReflectionExample { public class SomeType{} public class Injectable{ @Inject private Provider someTypeProvider; } public static void main(String[] args){ try { Field providerField […]