首页  >  文章  >  这在 Java 泛型中怎么可能呢?

这在 Java 泛型中怎么可能呢?

王林
王林转载
2024-02-08 23:20:09911浏览

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是什么?

谁能解释一下吗?

解决方法

主要结果是IntegerString都是从Serialized实现的。

所以你的代码等于:

public static <T extends Serializable> void inspect(T a, T b) {
    System.out.println(a + "_" + b);
}

如果更改为blow代码,则仅在IntegerNumber子类中有效。

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中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除