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

Java泛型并转换为原始类型

公胤运
2023-03-14
问题内容

我目前正在尝试从书中学习如何使用泛型。在本章中,它说取一条数据T并将其转换为整数。我正在Eclipse中尝试不同的方法,但是似乎都不允许这样做。您如何执行以下任务:

LinkedList<T> arr = new LinkedList<T>();

Float fl = 8.74273123948;
arr.add(fl);

然后在另一个类中:

public int findValue(Node node)
{
  T data = node.data;
  int value = Number.valueOf(data);  
  return value;
}

我已经尝试使用.valueOf()(int)其他一些东西,但似乎没有什么能使Java满意。本书坚持要保持方法的通用性,以防使用浮点数或双精度数代替字符串或整数。

编辑:对于其他人可能有类似的问题。从对这个问题的所有评论和被接受的答案中搜集到:

在数据上使用.toString(),然后根据需要解析为所需的任何数据类型。


问题答案:

嗯,那是一本奇怪的书。我将根据我所知告诉您要点。

泛型是一种构造,使您可以在编译时检查要在特定集合,方法或类中尝试使用的类型是否实际上是知道该特定事物起作用所必需的功能的事物。

例如,您需要使用由模板中名为SearchParameter的接口确定的功能,但您只能将<T>参数视为一个对象。或者,在您的情况下,一个更好的示例可能是这样的自定义接口IntegerConvert

public interface IntegerConvert
{
    Integer returnAsInteger();
}

您可能会遇到一个像这样的类:

public class MyData implements IntegerConvert
{
    private String data;

    public MyData(String data)
    {
        this.data = data;
    }

    @Override
    public Integer returnAsInteger()
    {
        return Integer.parseInt(data); //throws ParseException if it doesn't work
    }
}

然后,您可以具有以下列表:

List<IntegerConvert> listOfConvertibles = new ArrayList<IntegerConvert>();

或者如果您想在将来变得更通用,

List<? extends IntegerConvert> listOfConvertibles = new ArrayList<IntegerConvert>();

然后你可以做

listOfConvertibles.add("25");
listOfConvertibles.add("40");
listOfConvertibles.add("35");
for(IntegerConvert ic : listOfConvertibles)
{
    System.out.println("" + ic.returnAsInteger());
}

我想这虽然是一个过于复杂的例子。下面是一个更简单的示例:

public class Node<E>
{
    private E data;

    public Node(E e)
    {
        this.data = e;
    }

    public E getData()
    {
        return data;
    }

    public void setData(E e)
    {
        data = e;
    }

    public void print()
    {
        System.out.println(data.toString());
    }
}

public class MyClass
{
    public void doSomething()
    {
        List<Node<Float>> listOfFloatNodes = new ArrayList<Node<Float>>();
        listOfFloatNodes.add(new Node<Float>(new Float(8.7472742f)));
        listOfFloatNodes.add(new Node<Float>(new Float(5.56842742f)));
        listOfFloatNodes.add(new Node<Float>(new Float(6.5467742f)));
        MyOtherClass moc = new MyOtherClass();
        moc.useNodeList(listOfFloatNodes);
    }
}

public class MyOtherClass
{
    public <E> void useNodeList(List<Node<E>> list)
    {
         for(Node<E> node : list)
         {
             printNode(node);
         }
    }

    public <E> void printNode(Node<E> node)
    {
         node.print();
    }
}

public class MainClass
{
    public static void main(String[] args)
    {
        MyClass myClass = new MyClass();
        myClass.doSomething();
    }
}

如有任何疑问,请发表评论。



 类似资料:
  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 我读了很多文章,但我不明白这两行之间的区别: 我看到的唯一区别是第一行触发了“未检查的分配”警告。

  • 到目前为止,我在夸克斯的斯莫尔黑伊叛变中做了非常基本的事情。基本上,我有一两个非常小的web服务,它们只与web应用程序交互。这些服务返回一个

  • 我想说得具体一点。我有一个名为Result的类和一个名为Result的派生类 这些类在方法中用作返回类型。为此,我创建了这个helper类: 正如您所看到的,上面的代码对于成功有两种返回类型,一种是如果您不想返回任何东西,另一种是如果您想返回一些东西,但是失败的结果永远不会返回什么东西。这是不必要的,只是一个错误消息。这使我想到以下问题:当我想创建一个可以使用返回类型返回Success,而不使用返

  • 我正试图解决一个泛型问题。我在做一些手工选角,感觉好像我做错了什么。我对使用泛型有点陌生,所以很有可能我在某些方面误用了它们。如能提供指导,将不胜感激。 TLDR: 我有一个带有泛型方法的接口,该泛型方法采用参数。我在一个类中实现了这个接口,但在实现器中,我希望确保是特定类型的(假设,这样我就可以提取一些字段)。我怎么能那样做? 详细信息: 下面有一个接口和一个实现类,其中。 具有以下定义: 而具

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类