【问题标题】:Using generic interfaces [duplicate]使用通用接口 [重复]
【发布时间】:2014-03-10 18:24:07
【问题描述】:

这两个类声明有什么区别

1:

class MyClass <T extends Number & Comparable>

2:

class MyClass <T extends Number & Comparable<T>>

我认为存在差异。但是我找不到可以显示差异的示例,因为我不完全理解。

你能告诉我这个例子吗?

【问题讨论】:

  • 你的第一个 sn-p 使用了一个你不应该使用的原始类型。
  • @Paul Bellorano,我读过这个话题。我有具体的问题!
  • 我建议你重新阅读它。它准确地解决了这个问题。
  • 我不接受你
  • 您应该阅读Java Generics 上的教程,更加熟悉基础知识和术语。然后你可能也会同意他的观点。

标签: java generics interface legacy type-erasure


【解决方案1】:

有区别。第一个是使用原始类型,因此类型安全性较低。例如:

这有效,但不应该有效

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

【讨论】:

  • 这有效,但不应该有效优秀的短语
  • // 有效,但会导致运行时错误 能否显示完整代码?
  • @gstackoverflow 创建第一个MyClass 的实例,并调用其use() 方法,传递适当的参数。我想你能做到的就这么多了。
  • @gstackoverflow 添加了一个示例
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 2015-03-10
  • 2012-06-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多