我目前正在尝试学习如何使用一本书中的泛型.在本章中,它说要获取一段数据T并将其转换为整数.我在Eclipse中尝试不同的东西,但似乎没有人允许这样做.你怎么能执行以下任务:
LinkedList arr = new LinkedList();
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 listOfConvertibles = new ArrayList();
或者如果你想在未来更加通用,
List extends IntegerConvert> listOfConvertibles = new ArrayList();
然后你就可以做到
listOfConvertibles.add("25");
listOfConvertibles.add("40");
listOfConvertibles.add("35");
for(IntegerConvert ic : listOfConvertibles)
{
System.out.println("" + ic.returnAsInteger());
}
虽然这是一个过于复杂的例子,但我想.一个更简单的例子如下:
public class Node
{
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> listOfFloatNodes = new ArrayList>();
listOfFloatNodes.add(new Node(new Float(8.7472742f)));
listOfFloatNodes.add(new Node(new Float(5.56842742f)));
listOfFloatNodes.add(new Node(new Float(6.5467742f)));
MyOtherClass moc = new MyOtherClass();
moc.useNodeList(listOfFloatNodes);
}
}
public class MyOtherClass
{
public void useNodeList(List> list)
{
for(Node node : list)
{
printNode(node);
}
}
public void printNode(Node node)
{
node.print();
}
}
public class MainClass
{
public static void main(String[] args)
{
MyClass myClass = new MyClass();
myClass.doSomething();
}
}
如果您有任何问题,请发表评论.
标签:java,casting,generics
来源: https://codeday.me/bug/20190926/1819815.html