我已经阅读了几个与我类似的问题,但我仍然没有看到发生了什么,或者为什么它只发生在(int)而不是其他更复杂的类型:
HashMap<?, ?> returncp = startAndWaitForJob("DSP_WF_" + operation, cp);
DSPResponseDTO dto = (DSPResponseDTO) returncp.get("RESPONSE_OBJECT");
String respDesc = (String) returncp.get("statusInfoResponseDescription");
int respCode = (int) returncp.get("statusInfoResponseCode");
编译错误:
[javac] int respCode = (int) returncp.get("statusInfoResponseCode");
[javac] ^
[javac] required: int
[javac] found: CAP#1
[javac] where CAP#1 is a fresh type-variable:
[javac] CAP#1 extends Object from capture of ?
已经考虑过的问题:
incompatible types and fresh type-variable
答案 0 :(得分:0)
我不知道地图中有哪些类型,但这里
$(document).ready(function() {
function sumRows() {
var sum = 0,
total = $('#total');
$('#myteam tr').each(function() {
var amount = $(this).find('input[name="amount"]'),
checkbox = $(this).find('input[name="include"]');
if (checkbox.is(':checked') && amount.val().length > 0) {
sum += parseInt(amount.val(), 10);
}
});
total.text(sum);
$("#diff").text(Math.abs(sum - parseInt(total2.innerText)));
}
function sumRows2() {
var sum2 = 0,
total2 = $('#total2');
$('#otherteam tr').each(function() {
var amount2 = $(this).find('input[name="amount2"]'),
checkbox2 = $(this).find('input[name="include2"]');
if (checkbox2.is(':checked') && amount2.val().length > 0) {
sum2 += parseInt(amount2.val(), 10);
}
});
total2.text(sum2);
$("#diff").text(Math.abs(parseInt(total.innerText)- sum2));
}
// calculate sum anytime checkbox is checked or amount is changed
$('input[name="amount"], input[name="include"]').on('change keyup blur', sumRows);
$('input[name="amount2"], input[name="include2"]').on('change keyup blur', sumRows2);
});
您将String respCode = (int) returncp.get("statusInfoResponseCode");
来电的结果投放到get
并将其分配给int
。
如果是String
,请使用
Integer
答案 1 :(得分:0)
首先是CAP#1
我发现了quote:
究竟是什么“捕捉#337?”意思?当编译器在其类型中遇到带有通配符的变量时,例如rebox()的box参数,它知道必须有一些T,其中box是Box。它不知道T代表什么类型,但它可以为该类型创建一个占位符来引用T必须的类型。该占位符称为捕获该特定通配符。在这种情况下,编译器已经指定了名称“capture#337 of?”到盒子类型的通配符。每个变量声明中每次出现一个通配符都会获得不同的捕获,因此在泛型声明foo(Pair x,Pair y)中,编译器会为四个通配符中的每一个的捕获分配不同的名称,因为它们之间没有任何关系。任何未知类型参数。
现在让我们回到消息CAP#1 extends Object from capture of ?
它将CAP#1
视为Object
的实例,更像是扩展类Object
的类的实例。
现在需要想象通用在编译时转换为强制转换。这意味着:
HashMap<?, ?> map = new HashMap();
int test = (int) map.get("");
或多或少相当于:
HashMap<?, ?> map = new HashMap();
int test = (int) (Object) map.get("");
将Object
强制转换为'int'是不可能的(或编译器允许的)。
当然,这个Object
用于简化表示。
但完全可以将Object
转换为'String'或'Integer'。
所以你能做的是:
HashMap<?, Integer> returncp = startAndWaitForJob("DSP_WF_" + operation, cp);
在这种情况下,你甚至不需要施放任何东西(see)。
但如果出于任何原因无法做到这一点:
int respCode = ((Integer) returncp.get("statusInfoResponseCode")).intValue();