java - 扩展泛型

标签 java generics extends

我有以下代码:

public class GenericsTest<T extends Number> {

    public void doSomething(T v1, T v2) {
    }

    public void test()
    {
        GenericsTest<T> test = new GenericsTest<>();
        //test.doSomething(new Integer(0), new Integer(1)); Not ok
    }
}

test()我创建 GenericsTest<T>其中 T延伸Number , 但我不能传递任何数字。

The method doSomething(T, T) in the type GenericsTest is not applicable for the arguments (Integer, Integer)

为什么我不能通过 Integer如果TNumber以及Integer

最佳答案

如建议的那样,我将尝试通过反例使事情更清楚:

作为 test()方法在泛型类中,T方法内部使用的参数是类的参数。这意味着,new GenericTest<Double>().test()会创建一个 GenericTest<Double>在里面,同时一个new GenericTest<Integer>().test()会创造一个很好的GenericTest<Integer>里面。在编译时,尚不清楚 T 的具体类型。将使用参数,编译器在具体类型如 Integer 时引发错误与 GenericTest<T> 一起使用在 test() 中创建的对象方法。

调用 new GenericTest<Integer>() 就好了在 test() 内方法,但仍然有点困惑。这就是为什么我会建议将此类测试方法放在类之外,这样事情就会立即变得清晰起来。

(将测试代码移至 main() 方法的答案正是这样做的。)

关于java - 扩展泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978389/

相关文章:

java - 严重 : null<br> com. mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;

java - 泛型和扩展的问题

javascript - typescript :如何扩展两个类?

java - 访问祖先和父方法的正确(Java)约定?

java - 更新 map 键值java

java - 连接池中的数据库连接

Java构造函数困惑,什么去了哪里?

c# - 编译时泛型语法

java - Java 中通用方法参数的 getClass()

java - Java : extends ConcreteClass & I 中类的双重泛型约束