【问题标题】:Java, how to read multiple data types from one function input?Java,如何从一个函数输入中读取多种数据类型?
【发布时间】:2021-04-05 07:05:54
【问题描述】:

假设我想在我的代码中调用一个函数,我想在一种情况下输入一个整数,在另一种情况下输入一个字符串/布尔值/字符...我知道 var 用于执行此操作,但它没有不能在我的代码中工作。

我需要更改/添加什么才能使其正常工作并能够接收不同的数据类型?

public static void add(var num){//-here is var but I get an error
           //do something
        }

【问题讨论】:

  • 我知道 var 用于执行此操作 -- 不。使用 add(Object) 和随后的 instanceof 检查并强制转换为您要处理的类型,或使用所有支持的类型重载方法(例如,add(int)add(String)、...)(取决于您的情况和实际调度)。
  • 你可以使用与main()函数相同的逻辑,String[] args一个参数数组
  • @Hamza Abdaoui 但我正在使用函数,所以 main 在这里对我没有帮助
  • 我说的是使用参数数组,比如main!但我认为您真正要寻找的是“通用类型”,请查看tutorialspoint.com/java/java_generics.htm

标签: java function types


【解决方案1】:

我知道 var 用于执行此操作,但它在我的代码中不起作用。

不,不是。

Java 是强类型和简单类型。事物是有类型的。没有动态/鸭式类型。 var 不是这样。 var 只是语法糖。

在鸭式/动态语言中,您可以编写:

var x;
x = 5;
x = "Hello";

在 java 中,你不能这样做var x; 是编译器错误。

var x 在 java 中只是简写:在这一行中取你要分配给 x 的事物的类型。假设我的意思是写出那种类型。换句话说,var 仅在您内联初始化时才被允许:

var x = "Hello"; // legal; and 100% the same as writing String x = "Hello"
x = 5; // compiler error. x is of type String, and 5 isn't a string.

我需要更改/添加什么才能使其正常工作并能够接收不同的数据类型?

String、boolean、char 和 int 中常见的类型是什么?

Object 是最好的答案,但它不是一个很好的答案。所以这就是你必须做的:

public static void add(Object num) {
    if (num instanceof Number) { .... }
    else if (num instanceof String) { .... }
    else if (num instanceof Boolean) { .... }
    else throw new IllegalArgumentException("Only numbers, strings, and booleans allowed");
}

但这是非常非 java 的。听起来您想设计一个弱类型系统,其中"5"5 被同等对待,true1 被同等对待。我建议你不要这样做。

另一种方法是只制作那么多方法。在java中,一个方法是由它的整个签名定义的:名称,还有参数类型和返回类型,以及方法所在的类型。所以,你可以创建多个添加方法:

public static void add(String num) { ... }
public static void add(int num) { ... }

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多