Hmm.. jeg aner ikke hvad de API calls du laver gør, men jeg tror godt jeg kan se hvad problemet er.
Object value;
try {
value = method.invoke(operatingSystemMXBean);
} catch (Exception e) {
value = e;
} // try
Jeg har kigget i documentationen, og Method.invoke() retunere ganske rigtigt et object af typen Object, det gør den, så den har muglighed for at retunere et hvilket som helst from for object, men vis du vil arbejde med det, bliver du nødt til at caste det til noget andet.
I øvrigt kan jeg ikke se meningen med, at du sætter Exception e til at være value, vis det går galt, hellere lav en anden variable af Typen Exception vis du skal bruge det senere, eller bare kald printStacTrace() på e.
Lige en sidste ting, man kan ikke caste fra Object til de primitive typer(int, long osv.)men man kan godt caste til object representationerne af dem(Integer, Long osv.).
Jeg har ikke prøvet at compilere det, men jeg vil tro at det her virker:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package adressebog;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
*
* @author danni
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
for (Method method : operatingSystemMXBean.getClass().getDeclaredMethods()) {
method.setAccessible(true);
if (method.getName().startsWith("get")
&& Modifier.isPublic(method.getModifiers())) {
int value;
try {
value = ((Integer)method.invoke(operatingSystemMXBean)).intValue();
} catch (Exception e) {
e.printStackTrace();
} // try
System.out.println(method.getName() + " = " + (value/1024) +" KiloBytes");
} // if
} // for
}
}
Nu caster jeg først objectet til en Integer og convertere det derefter til en int, med metoden intValue(). Så kan man bruge +-/ og * på det.
Jeg har ingen ide om hvorfor det lykkedes dig at bruge + operatoren på obejctet før.