首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用泛型解决重载方法( java )

如何使用泛型解决重载方法( java )
EN

Stack Overflow用户
提问于 2021-06-08 02:04:39
回答 4查看 76关注 0票数 2
代码语言:javascript
运行
复制
public void put(String str);
public void put(Integer in);
public void put(Boolean bol);

public <T> void putGeneric(T value)
{
    put(value);
}

此代码显示错误"can not resolve method“

EN

回答 4

Stack Overflow用户

发布于 2021-06-08 02:13:17

T是字符串、整数、布尔值之一

基于这些要求,您不能使用泛型在类级别强制执行此操作。

如果您希望能够传递这三种类型,则可以使用级联try-catch,并且只允许这些类型的字符串表示

例如,

代码语言:javascript
运行
复制
void putGeneric(String s) { 
  try { 
    int i = Integer.parseInt(s); 
    put(i);
  } catch (NumberFormatException e) { 
    if (s.matches("true|false") {
      put(Boolean.parseBoolean(s));
    } else {
      put(s); 
    }
  }
}

更具体地说,您需要将类型强制到特定的方法中

票数 0
EN

Stack Overflow用户

发布于 2021-06-08 02:22:45

这里的T是泛型类型,JVM也搞不清楚它应该解析成哪种类型。这个功能应该通过一个名为Put的方法更好地实现,该方法接受泛型类型,因为所有类型的操作都是通用的。

泛型用于函数执行相同工作而不考虑输入参数的情况,假设add(x,y)方法将添加整数,双精度...此类型的方法定义需要实现泛型。

票数 0
EN

Stack Overflow用户

发布于 2021-06-08 02:24:43

之所以显示这个错误,是因为您没有任何可以接受所有对象的方法,因此没有适合的方法。

您需要准确地告诉Java什么是value

代码语言:javascript
运行
复制
public void put(String str);
public void put(Integer in);
public void put(Boolean bol);

public <T> void putGeneric(T value) {
    if (value instanceof String) put((String) value);
    else if (value instanceof Integer) put((Integer) value);
    else if (value instanceof Boolean) put((Boolean) value);
    else throw new IllegalArgumentException("value has wrong type. Type: " + T + " value: " + value);
}

或者直接将put()-methods保留为公共并直接访问它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67876661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档