java - 如何将不同的方法与泛型一起使用

标签 java generics

public class MyGenerics<T extends Number>{
   List<T> = new ArrayList<T>();

   public void addToList(){
     for (ListIterator<T> it; it.hasNext(); ){
         it.next();
         it.add(number());
     }
   }

   public T number(){
     return (T) 5*Math.pi;
   }
}

据我所知,没有办法告诉编译器“我保证,number() 返回的所有内容都是扩展 Number 的对象,并且将被转换为 T 类型,无论它是什么,因为我正在类型转换它。

我是泛型新手,因此非常感谢任何帮助。我通过对类进行子类化来解决这个问题,但这半途而废了泛型的意义。

请注意,问题实际上并不是仅向列表添加一个值。问题在于泛型逻辑。 (只是为了清楚)

最佳答案

这个问题将自动装箱与泛型结合起来。这可不太好。

5 * Math.PI 是一个原始的 double。要转换为任何类型的 Number 对象,需要对其进行装箱。因此,编译器需要知道装箱操作的具体目标类型,但由于您使用的是泛型,所以它丢失了。

如果类未扩展,并且 number() 始终返回 double(或 Double),请勿使用泛型;明确并使用 Double 代替 T

如果要扩展该类,并且要重写 number() 方法,您仍然知 Prop 体类型。使用匹配的类型参数在子类中声明 List(您忽略了命名)。

关于java - 如何将不同的方法与泛型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946891/

相关文章:

java - 如何读取文本文件并将其打印到控制台窗口? java

java.rmi.NoSuchObjectException 但添加了静态引用

c# - 我可以扩展一个泛型类来限制可以使用的类型吗?

generics - Kotlin - "where"通用约束问题

c# - WPF SimpleCommand 可以使用泛型吗?

Java 7 try-with-resources - try 子句中可以包含什么

java开关性能优化

使用 JMS 连接到 TCP/IP 的 IBM MQ channel 的 Java 客户端抛出错误

c# - 创建一个封装通用集合的类有什么缺点吗?

C#:如何查找和创建满足多种类型约束的实例