在Java中从泛型类获取元素?
假设我有一个简单的类产品:在Java中从泛型类获取元素?,java,generics,Java,Generics,假设我有一个简单的类产品: class Product{ private String name; //constructor //get name method } 也是一个在Java中实际使用泛型的类: class ListR<t>{ //more coding here... public void print(){ Node a=first; while(curr!=null){
class Product{
private String name;
//constructor
//get name method
}
也是一个在Java中实际使用泛型的类:
class ListR<t>{
//more coding here...
public void print(){
Node a=first;
while(curr!=null){
System.out.println(a.elem); //prints the value of a node
a=a.next;
}
}
类列表器{
//更多的编码在这里。。。
公开作废印刷品(){
节点a=第一;
while(curr!=null){
System.out.println(a.elem);//打印节点的值
a=a.下一步;
}
}
因此,如果我在主程序中列出产品对象,如下所示:
ListR<Product> list=new ListR<>();
Product p1=new Product("books);
//...
list.add(p1)...
list.print();
ListR list=new ListR();
产品p1=新产品(“书籍”);
//...
列表。添加(p1)。。。
list.print();
如何使我的print方法打印存储的产品的名称,我尝试在print方法的A类中使用泛型,但我不太确定如何执行。有什么帮助吗
谢谢你不能,如果你保持现状的话。 据
ListR
所知,它包含Object
s,而Object
s不包含任何特定信息。它们有一个方法toString
,您可以重写,但不建议将其用于演示目的
选项1:内部接口
如果允许稍作更改,您可以做的是强制ListR
的内容实现一个接口,例如
public interface Printable {
String printedForm();
}
然后
class Product implements Printable{
//TODO: Whatever you want
@Override
public String printedForm() {
//TODO return a pretty printed form of the product.
//e.g. return this element's name
}
}
class ListR<T extends Printable>{
//...
public void print(){
Node a=first;
while(curr!=null){
//You can now invoke printedForm, because you forced T to implement Printable
System.out.println(a.printedForm());
a=a.next;
}
}
}
然后,在创建列表时:
ListR<Product> list = new ListR<>(new ProductFormatter());
listrlist=newlistr(newproductformatter());
这个编译?System.out.println(a.elem);
对象没有一个公共字段,据我所知名为elem
。不,它只是一个示例代码a.elem
做什么?它返回什么?“不,它只是一个示例代码“
--请发布有意义的代码。不要发布任何类型的代码。ListR list=new list();
没有意义。谢谢@Giulio Franco,你的答案很好,很遗憾很多人否决了这个问题,无法在这里给出简单的答案
ListR<Product> list = new ListR<>(new ProductFormatter());