Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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_Object_Casting - Fatal编程技术网

Java 将运行时之前未知的对象强制转换为其类型

Java 将运行时之前未知的对象强制转换为其类型,java,object,casting,Java,Object,Casting,我有一个包含三类节点的树。例如,根节点具有另一个节点类的左、右节点。这三个类都实现了一个接口。问题是在运行之前,我不知道left和right节点的类型,但我需要转换为特定类型,否则我无法访问节点的变量 那么,如何在运行时将这些节点强制转换为其类型呢 //node has a attribut left of type of interface Visitable public Visitable left; .... //Visitable is the Interface that the

我有一个包含三类节点的树。例如,根节点具有另一个节点类的左、右节点。这三个类都实现了一个接口。问题是在运行之前,我不知道left和right节点的类型,但我需要转换为特定类型,否则我无法访问节点的变量

那么,如何在运行时将这些节点强制转换为其类型呢

//node has a attribut left of type of interface Visitable
public Visitable left;

....

//Visitable is the Interface that the three classes has implemented
(CLASS) leftNode = (CAST_TO_ITS_TYPE) node.left;

//I only can access isVisited, if leftNode is casted to its class
Boolean visited = leftNode.isVisited;
我尝试了“instanceof”,但这不起作用,因为leftNode可能尚未初始化

Visitable leftNode;
if (node.left instanceof NodeClassOne) {
    leftNode = (NodeClassOne) node.left;
} else if (node.left instanceof NodeClassTwo) {
    leftNode = (NodeClassTwo) node.left;
}

Boolean visited = leftNode.isVisited;

实际上你做得对
node.left
应为
非空
,以正确定义其类型

Visitable leftNode = null;

if (node.left != null) {
    if (node.left instanceof NodeClassOne)
        leftNode = (NodeClassOne) node.left;
    else if (node.left instanceof NodeClassTwo)
        leftNode = (NodeClassTwo) node.left;
}

Boolean visited = leftNode != null ? leftNode.isVisited : Boolean.FALSE;

实际上你做得对
node.left
应为
非空
,以正确定义其类型

Visitable leftNode = null;

if (node.left != null) {
    if (node.left instanceof NodeClassOne)
        leftNode = (NodeClassOne) node.left;
    else if (node.left instanceof NodeClassTwo)
        leftNode = (NodeClassTwo) node.left;
}

Boolean visited = leftNode != null ? leftNode.isVisited : Boolean.FALSE;

你为什么说
instanceof
不起作用?什么不起作用?null上的Instanceof将返回false。您的代码对我来说毫无意义。您说过需要强制转换才能访问字段,但强制转换变得无关紧要,因为变量类型将保持可访问状态,因此,无论您是否强制转换为
NodeClassOne
NodeClassTwo
。@Zack使用第二个代码IntelliJ告诉我leftNode可能尚未初始化。@Tom如果不强制转换,我会得到错误:无法解析符号“isVisited”为什么说
instanceof
不起作用?什么不起作用?null上的Instanceof将返回false。您的代码对我来说毫无意义。您说过需要强制转换才能访问字段,但强制转换变得无关紧要,因为变量类型将保持可访问状态,因此,无论您是否强制转换为
NodeClassOne
NodeClassTwo
。@Zack使用第二个代码IntelliJ告诉我leftNode可能尚未初始化。@Tom如果没有强制转换,我会得到错误:无法解析符号“isVisited”,第3行的Null检查是不必要的。SomeClass的Null instanceof将返回false。不需要在第3行进行Null检查。SomeClass的Null instanceof将返回false。