php小编苹果为您解答:在Java泛型中,"这在 Java 泛型中怎么可能呢?"这样的问题其实是有可能的。因为Java泛型允许使用通配符来表示不确定的类型,比如使用 "?" 表示任意类型。当我们在定义泛型方法或泛型类时,可以使用通配符来限定参数类型或返回值类型,从而实现一些特定的功能。虽然在某些情况下,可能会因为类型擦除而导致一些限制,但通过合理的设计和使用,我们可以在Java泛型中实现许多看似不可能的操作。
我刚刚注意到,当谈到 Java 泛型时,一些对我来说非常违反直觉的事情。我们来看看这个方法:
public static <T> void inspect(T a, T b) { // ... }
可以进行以下调用:
inspect(new Integer(3), new String("What? How?"))
我认为一旦类型T被推导出来,它就必须是一致的,就像两个字符串或两个整数一样。 这没有多大意义,因为如果我的方法中有以下行:
T tmp
T是什么?
谁能解释一下吗?
主要结果是Integer
和String
都是从Serialized
实现的。
所以你的代码等于:
public static <T extends Serializable> void inspect(T a, T b) { System.out.println(a + "_" + b); }
如果更改为blow代码,则仅在Integer
或Number
子类中有效。
public static <T extends Number> void inspect(T a, T b) { System.out.println(a + "_" + b); }
这是一个更好的例子:
public class MyTest { @Test public void demo() { inspect(new FirstSon("a"), new SecondSon("b")); } public <T> void inspect(T a, T b) { System.out.println(a + "_" + b); } interface Parent { } static class FirstSon implements Parent { private String name; public FirstSon(String name) { this.name = name; } } static class SecondSon implements Parent { private String name; public SecondSon(String name) { this.name = name; } } }
以上是这在 Java 泛型中怎么可能呢?的详细内容。更多信息请关注PHP中文网其他相关文章!