Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用通用接口_Java_Generics_Interface_Legacy_Type Erasure - Fatal编程技术网

Java 使用通用接口

Java 使用通用接口,java,generics,interface,legacy,type-erasure,Java,Generics,Interface,Legacy,Type Erasure,这两个类声明之间有什么区别吗 1: 2: 我认为这是有区别的。但我找不到一个能显示差异的例子,因为我不完全理解 你能给我举个例子吗?有一点不同。第一种是使用原始类型,因此类型安全性较差。例如: 这是可行的,但不应该奏效 class MyClass<T extends Number & Comparable> { void use(T t) { String s = null; t.compareTo(s); // Works,

这两个类声明之间有什么区别吗

1:

2:

我认为这是有区别的。但我找不到一个能显示差异的例子,因为我不完全理解


你能给我举个例子吗?

有一点不同。第一种是使用原始类型,因此类型安全性较差。例如:

这是可行的,但不应该奏效

class MyClass<T extends Number & Comparable>
{
    void use(T t)
    {
        String s = null;
        t.compareTo(s); // Works, but will cause a runtime error
    }
}
然而这不起作用,因为它不应该起作用

class MyClass<T extends Number & Comparable>
{
    void use(T t)
    {
        String s = null;
        t.compareTo(s); // Works, but will cause a runtime error
    }
}
编辑:完整代码,根据要求:

class MyClass<T extends Number & Comparable>
{
    void use(T t)
    {
        String s = "Laziness";
        t.compareTo(s); // Works, but will cause a runtime error
    }
}


public class MyClassTest
{
    public static void main(String[] args)
    {
        MyClass<Integer> m = new MyClass<Integer>();
        Integer integer = new Integer(42);
        m.use(integer);
    }
}

您的第一个代码段使用了原始类型,您不应该使用它。@Paul Bellorano,我读过这个主题。我有一个具体的问题!我建议你再看一遍。它正好解决了这个问题。我不同意你的看法。你应该仔细阅读教程,更加熟悉基础知识和术语。然后你可能也会同意他的观点。这很有效,但不应该有效。很好的短语//有效,但会导致运行时错误。你能显示完整的代码吗?@gstackoverflow创建第一个MyClass的实例,并调用其use方法,传递适当的参数。“我想你能做的就这么多了。”gstackoverflow补充了一个例子
class MyClass<T extends Number & Comparable<T>>
{
    void use(T t)
    {
        String s = null;
        t.compareTo(s); // Compile-time error
    }
}
class MyClass<T extends Number & Comparable>
{
    void use(T t)
    {
        String s = "Laziness";
        t.compareTo(s); // Works, but will cause a runtime error
    }
}


public class MyClassTest
{
    public static void main(String[] args)
    {
        MyClass<Integer> m = new MyClass<Integer>();
        Integer integer = new Integer(42);
        m.use(integer);
    }
}