gpt4 book ai didi

Java 泛型和转换为原始类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:57 25 4
gpt4 key购买 nike

我目前正在尝试从一本书中学习如何使用泛型。在本章中,它说取一段数据 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。本书坚持保持方法通用,以防使用 float 或 double 而不是字符串或整数。

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

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

最佳答案

嗯,这是一本奇怪的书。我会尝试根据我所知道的告诉您它的要点。

泛型是一种结构,它允许您在编译时检查您尝试在特定集合、方法或类中使用的类型是否实际上知道该特定事物发挥作用所必需的功能。

例如,您需要使用模板中名为SearchParameter 的接口(interface)确定的功能,但您只看到<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();
}
}

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

关于Java 泛型和转换为原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24574478/

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