gpt4 book ai didi

java - 如何在Java中的字段中存储变量类型的对象?

转载 作者:行者123 更新时间:2023-12-02 09:51:49 25 4
gpt4 key购买 nike

我用 Java 创建了一个对象,名为“Edge”。该对象是图的有向边,它存储对其开头节点和结尾节点的引用。

这些节点当前是“顶点”对象,但是我还想将双边的原点存储在同一对象中,以便它将返回“面”对象。目前我只支持返回一个Vertex,如下代码所示。

public class Edge{

private Vertex org; //this is the line that I want to be able to store a
//face given certain conditions (the index being 1 or 3)

private Face left; //this is a line where I want to store a face normally
//but store a Vertex if this is a dual edge

private int index; //a number from 0-3, where 1 and 3 are in the dual graph

public Vertex Org(){
return org;
}

}

我想知道是否有一种方法来定义函数 Org() 和字段 org,使其可以是面或顶点。我想知道是否有一种使用泛型类型的方法,它可以根据索引参数变成“顶点”或“面”。下面是我尝试过的示例。

public class Edge<T>{

public T org;

private T Org(){
return org;
}

}

但是,这似乎不是一个非常优雅的解决方案,它仅适用于获取原点,而不适用于左面/顶点。

我想知道是否有一种方法来存储可以是两种可能的对象类型之一的字段,或者另一种简单的方法来解决这个问题。

最佳答案

您不想从同一方法返回完全不同类型的对象,因为返回它们后您会如何处理它们?

假设你这样做了:

Object faceOrVertex = edge.org(); // returns face or vertex

所以现在您必须决定如何处理您的面或顶点。您需要写:

if (faceOrVertex instanceof Face) {
// cast to Face and do face stuff
} else {
// cast to Vertex and do vertex stuff
}

您也可以调用两个不同的方法返回已知类型。

泛型在这里帮不了你。它们并没有消除对不同类型的需求。

如果您的 FaceVertex 类具有共同的功能,并且您希望以共同的方式处理它们,解决方案是两个使用共同方法声明一个接口(interface),并具有FaceVertex 类实现这些方法。如果不确切知道您想对 org 方法的结果做什么,就不可能推荐某些东西。

我建议您首先使用两种不同的方法实现解决方案,然后也许稍后查找可以重构为共享逻辑的通用代码块。

关于java - 如何在Java中的字段中存储变量类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275259/

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