gpt4 book ai didi

Java 选择性泛型

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:21 24 4
gpt4 key购买 nike

class A <T> {

private T field;
}

我知道我可以使用 < ... extends ... > 强制类型参数为某种有界类型,但是我如何强制类型参数 T 只能是 String、Integer、SomeClassB、SomeEnumC 而不是可以用其他任何东西对其进行参数化吗?

A<SomeClassB> a = new A<SomeClassB>();

将是合法的。

A<SomeClassX> a = new A<SomeClassX>();

将是非法的。

我已经尝试使用

测试这些类型
T instanceof SomeEnumC

在类A的构造函数中,但是很乱。

最佳答案

注意:我同意上面@Jeffrey 的评论,这似乎没有多大意义,因为您似乎无法获得任何有用的类型信息通过做这种限制。我真的很想知道您的用例是什么。


您不能限制 T 可接受的通用类型到您的示例中的不相关类列表。您只能使用 super 限制泛型类型或 extends ,这意味着它们必须是某些给定类型的父类(super class)型或子类型。

但是,由于您似乎只有有限数量的类,因此您希望允许 T ,您应该能够枚举所有这些。这是我的想法:

public class A<T> {

/**
* Private constructor means only nested classes
* can extend this class. We use this to limit the
* types that can be used for T.
*/
private A() { }

/** Integer version of A */
public static class IntA extends A<Integer> { }

/** String version of A */
public static class StringA extends A<String> { }

}

现在您可以使用 static import导入 A<T> 的嵌套版本你想要的,或者所有的都像这样:import static A.*;

关于Java 选择性泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19884189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com