Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[JAVA]如何获取泛型类类型名称_Java - Fatal编程技术网

[JAVA]如何获取泛型类类型名称

[JAVA]如何获取泛型类类型名称,java,Java,我希望通过java反射获得字符串值中的E类名。 例如,如果我创建的节点类型为Person,则getClassName()必须返回“Person” 有人能帮我吗 public class Node<E extends AbstractNode> { String getClassName() { String name = ?? } private String alias; public Node() { } } public abstract class Ab

我希望通过java反射获得字符串值中的E类名。 例如,如果我创建的节点类型为Person,则getClassName()必须返回“Person”

有人能帮我吗

public class Node<E extends AbstractNode> {

String getClassName() {
    String name = ?? 
}

private String alias;

public Node() {

}
}


public abstract class AbstractNode {
}


public class Person extends AbstractNode {
private String name;
private String surname;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSurname() {
    return surname;
}

public void setSurname(String surname) {
    this.surname = surname;
}
}
公共类节点{
字符串getClassName(){
字符串名=??
}
私有字符串别名;
公共节点(){
}
}
公共抽象类抽象节点{
}
公共类Person扩展抽象节点{
私有字符串名称;
私家姓;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getNames(){
返回姓氏;
}
public void setSurname(字符串姓氏){
this.姓氏=姓氏;
}
}

节点添加一个字段

private static final Class<T> type;
最后,在
节点
类中创建
getClassName
方法:

public String getClassName(){
    return this.type.getName();
}
编辑:
作为旁注,您的
AbstractNode
类实际上是不必要的(它不做任何事情),因此
extend
也不是亲自的

我不太明白你的例子和要求,你能详细说明一下吗?
Person
Node
(我猜你的意思是)有什么关系?
Node
在何处使用以及如何使用?Node的可能重复是一个简单的对象,它具有属性,但与扩展AbstractNode的值无关。这实际上取决于如何使用
Node
,例如,如果节点包含类型为
e
的元素,则可以在此基础上调用
getClass()
,如果您使用具体的子类,如
PersonNode extends Node
,则可以使用反射来获取类型参数等(注意,在大多数情况下,由于类型擦除不适用于
Node
类型的变量)。
public String getClassName(){
    return this.type.getName();
}