当前位置: 首页 > 面试题库 >

接受两种类型之一的泛型类

吴缪文
2023-03-14
问题内容

我想制作这种形式的通用类:

class MyGenericClass<T extends Number> {}

问题是,我希望T可以是整数或Long,但不能接受Double。因此,仅有的两个可接受的声明将是:

MyGenericClass<Integer> instance;
MyGenericClass<Long> instance;

有什么办法吗?


问题答案:

答案是不。至少没有办法使用泛型类型做到这一点。我建议结合使用泛型和工厂方法来执行您想要的操作。

class MyGenericClass<T extends Number> {
  public static MyGenericClass<Long> newInstance(Long value) {
    return new MyGenericClass<Long>(value);
  }

  public static MyGenericClass<Integer> newInstance(Integer value) {
    return new MyGenericClass<Integer>(value);
  }

  // hide constructor so you have to use factory methods
  private MyGenericClass(T value) {
    // implement the constructor
  }
  // ... implement the class
  public void frob(T number) {
    // do something with T
  }
}

这样可以确保只能创建MyGenericClass<Integer>MyGenericClass<Long>实例。尽管您仍然可以声明类型的变量,MyGenericClass<Double>但它必须为null。



 类似资料:
  • 我试图实现一个接受泛型参数的函数定义,只要它扩展了另一个特定的泛型类型。简言之参数A必须扩展参数B,其中A和B都是泛型的。 下面是我的示例 用法示例如下 一些封闭的班级 和函数调用 我不想在抽象类声明中定义E,因为T已经在那里定义了。 我也试着做了以下几点: 将myList定义为接受扩展T的键 将E定义为T类型(无法找到如何指定它在函数中扩展T 但它从来都不起作用。有没有办法做到这一点?我在Sta

  • 在学习C# winform中,注意到List<T>的集合,只接受一个泛型。 有没有如其他语言那样,可以实现 List<string,bool>这样的集合的。 注意,不是Dictionary<string,bool>,因为键值对中,要求键 为唯一的。 请大佬指导 同上

  • 问题内容: 我正在写一个方法,该方法应接受不共享除父对象以外的父类型的两种类型之一的对象作为其参数。例如,类型为Dreams和Garlic。您可以同时和。我想有一个方法,可以将Dreams和Garlic都接受为其参数。 Garlic和dreams都是某些库的一部分,因此让它们实现ICrushable接口(以便我可以编写)是不可行的。 我的方法主体很长,因此重载将意味着复制代码。丑陋。我确定我可以使

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 编译时,此代码将产生以下+错误: 问题是访问中的类型T与列表中的T不相同。如何修复此编译问题?

  • 泛型类型 除了反省函数, Swift允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和Array、Dictionary方式类型. 1. 定义泛型类型 定义一个普通的结构体 struct IntStack { var items = [Int]() mutating func push(_ item: Int) { items.appen