gpt4 book ai didi

java - 从方法返回值而不创建对象

转载 作者:行者123 更新时间:2023-11-29 03:34:52 24 4
gpt4 key购买 nike

好吧,我有一个大的类结构,看起来像 THIS

它适合学校使用,我的导师喜欢星际争霸,所以我们就开始吧。

无论如何,我在GeneratorBuilding 类中有一个方法应该能够实例化一个新的Marine 对象。但是,我需要知道一个Marine 对象需要多少资源。

我在抽象 Unit 类中有一个抽象 int 方法,称为 unitCost()。然后 Marine 类重写此方法并返回一个值,例如 50。

我正在寻找一种方法,让我的 GeneratorBuilding 类获得 Marine 类中 unitCost() 方法的返回值,而无需调用任何特定的 Marine 对象。

我知道我可能会创建一个海洋对象,然后询问它的成本是多少,然后如果我没有资源,我会删除该对象而不是将其插入 ArrayList。但这似乎几乎是一种解决方法。

编辑:重点是能够让我所有的具体类继承并覆盖 UnitCost() 方法。所以我可以使它成为静态的,但这破坏了继承结构的全部意义......

EDIT2:因为有示例代码的请求(不难想象)

public void makeMarine(){

//uses resources and throws exception etc if there are not enough resources
Game.useResources(Marine.unitCost());

//creates a marine
Game.addMarine();
}

最佳答案

您可以通过在每个类中声明一个专门命名的静态字段,并通过反射}获取它来做到这一点。

假设您的类如下所示:

class ClassNumber1 {
public static final int cost = 123;
}
class ClassNumber2 {
public static final int cost = 321;
}

然后你可以像这样获取他们的cost字段:

public static <T> int getCost(Class<T> cl) throws Exception {
// This is oversimplified: you need to check that the class
// indeed has a field called "cost" by null-checking the return value
// of getField(), verifying your cast, catching exceptions, and so on.
// But this will work in a "closed" system, when you know for sure
// that an int constant field does exist:
return (int)cl.getField("cost").get(null);
}

按如下方式调用该方法:

System.out.println(getCost(ClassNumber1.class));
System.out.println(getCost(ClassNumber2.class));

这是一个demo on ideone .

关于java - 从方法返回值而不创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095837/

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