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“
发布于 2021-06-08 02:13:17
T是字符串、整数、布尔值之一
基于这些要求,您不能使用泛型在类级别强制执行此操作。
如果您希望能够传递这三种类型,则可以使用级联try-catch,并且只允许这些类型的字符串表示
例如,
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);
}
}
}更具体地说,您需要将类型强制到特定的方法中
发布于 2021-06-08 02:22:45
这里的T是泛型类型,JVM也搞不清楚它应该解析成哪种类型。这个功能应该通过一个名为Put的方法更好地实现,该方法接受泛型类型,因为所有类型的操作都是通用的。
泛型用于函数执行相同工作而不考虑输入参数的情况,假设add(x,y)方法将添加整数,双精度...此类型的方法定义需要实现泛型。
发布于 2021-06-08 02:24:43
之所以显示这个错误,是因为您没有任何可以接受所有对象的方法,因此没有适合的方法。
您需要准确地告诉Java什么是value:
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保留为公共并直接访问它们。
https://stackoverflow.com/questions/67876661
复制相似问题