当前位置: 首页 > 面试题库 >

Java方法中的动态返回类型

关飞翼
2023-03-14
问题内容

我在这里多次看到类似的问题,但有一个很大的不同。

在其他问题中,返回类型将由参数确定。我想要/需要做的是通过解析后的值确定返回类型byte[]。从我收集到的信息来看,以下方法可行:

public Comparable getParam(String param, byte[] data) {
    if(param.equals("some boolean variable")
        return data[0] != 0;
    else(param.equals("some float variable") {
        //create a new float, f, from some 4 bytes in data
        return f;
    }
    return null;
}

我只是想确保在我搞砸任何东西之前,它有机会工作。提前致谢。


问题答案:

你做不到
Java返回类型必须是固定的基本类型或对象类。我敢肯定,您能做的最好的事情就是返回一个包装器类型,该包装器类型具有可获取各种可能类型的值的方法,以及一个内部枚举,该枚举类型指示哪种有效。

-–编辑—在丹妮丝更正之后!

public <Any> Any getParam(boolean b){
return((Any)((Boolean)(!b)));
}
public <Any> Any getParam(float a) {
 return((Any)((Float)(a+1)));
}
public <Any> Any getParam(Object b) {
 return((Any)b);
}
public void test(){
  boolean foo = getParam(true);
  float bar = getParam(1.0f);
  float mumble = getParam(this); // will get a class cast exception
}

您仍然需要为装箱物品和类型检查返回的值付出一些代价,当然,如果您的调用与getParam的实现实际执行的操作不一致,则将获得类强制转换异常。



 类似资料:
  • 问题内容: 可能是之前问过的一个问题,但是像往常一样,第二个提到“通用”一词时,您会得到一千个答案,以解释类型擦除。我很早以前就经历了这一阶段,现在对泛型及其使用有了很多了解,但是这种情况稍微有些微妙。 我有一个表示电子表格中数据单元格的容器,该容器实际上以两种格式存储数据:既作为显示字符串,也取决于数据(作为对象存储)为另一种格式。该单元格还包含一个在类型之间转换的转换器,并且还对类型进行有效性

  • 问题内容: 我有一类这样的方法: 我如何在另一个类中调用此方法? 问题答案: 1. 如果要从中调用该方法的类位于同一包中,则创建该类的实例并调用该方法。 2. 使用 3. 最好有个赞等等。 例如:

  • 问题内容: 我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为struct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于 问题答案: 快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的

  • 因此,首先,我正在构建一个基于Selenium和Java的自动化库。我正在构建一种参数化传递到测试方法中的数据的方法。我正在使用TestNG。 我需要帮助的是构建这个数据提供程序方法... 现在,如果我返回指定的类,它将与其中的一个一起工作。 示例: 如果您想查看我在GitHub上的项目,可以访问:https://GitHub.com/dominic-pace/autocorecomons

  • 我正在尝试实现和重写具有不同返回类型的方法,而不会被迫转换返回类型。 我的问题:是否可以在不强制强制转换的情况下返回不同的类型?解决这个问题的抽象方法看起来怎么样? 我认为必须有一个解决方案,因为编译器应该知道返回类型...

  • 问题内容: 从子类对象调用该方法时,是否有任何优雅的方法可以使位于父类中的Java方法返回子类的对象? 我想在不使用其他接口和方法的情况下实现此功能,并在没有类强制转换,辅助参数等的情况下使用此功能。 更新: 抱歉,我不太清楚。 我想实现方法链,但是父类的方法存在问题:调用父类方法时,我无法访问子类方法… 我想我已经提出了我的想法的核心。 因此,方法应返回类的对象。 问题答案: 如果您只是在寻找针