我有一个对象,我必须验证问题的值,对象的一些属性是自定义对象的数组。这将涉及到一些无聊的阵列的各个元素。为每个元素执行getter,例如:
AttribGrp[] x = Object.getAttribGrp()
x[i].getSomeValue()
我需要这样做。我已经使用Enum列表中的数据提取了数据 属性以下列方式。
public String getAttribValueAsString(MethodEnum attribName)
{
String attribValue = null;
Object value = getAttrib(attribName.toString());
if (value != null)
attribValue = value.toString();
return attribValue;
}
主叫:
private Object invoke(String methodName, Object newValue)
{
Object value = null;
try
{
methodInvoker.setTargetMethod(methodName);
if (newValue != null)
methodInvoker.setArguments(new Object[]{newValue});
else
methodInvoker.setArguments(new Object[]{});
methodInvoker.prepare();
value = methodInvoker.invoke();
}
catch (ClassNotFoundException e)
{
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
}
catch (NoSuchMethodException e)
{
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
}
catch (InvocationTargetException e)
{
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
}
catch (IllegalAccessException e)
{
throw new IllegalStateException("Method invocation failed. " + e.getMessage(),e);
}
return value;
}
我将在阵列中处理许多不同类型和不同值的数组。我想创建一个方法如下。
public Object getAttribArray(RIORepeatingGrpEnum repeatingGrp)
{
repeatingGrp[] grp = null;
Object grpVal = getAttrib(repeatingGrp.toString());
if(grp != null)
grp = (repeatingGrp[]) grpVal;
return grp;
}
这给我带来了多个主要与repeatGrp []有关的错误。数组类型应与枚举名称相同。是否有可能创建一个这样的方法来创建一个未定义类型的数组?
答案 0 :(得分:4)
如果您想拥有未知类型的数组,请使用泛型:
public <T> T[] getAttribArray(Class<T> repeatingGrpClass)
{
//get the attribute based on the class (which you might get based on the enum for example)
return (T[]) getAttrib( repeatingGrpClass.getName() ); //note that you might want to use the class object instead of its name here
}
答案 1 :(得分:2)
不,您不能将变量(repeatingGrp
)用作类型。
有很多方法可以进行“动态”投射,但这些对你没有帮助。 getAttribArray
的返回类型为Object
,这会破坏投射到特定类型的点。
即使您可以解决这个问题,但仍然不清楚您可以使用此机制做些什么。您希望能够对getAttribArray()
的结果做什么?
答案 2 :(得分:0)
正如Oli Charlesworth指出的那样,你不能使用变量名来进行投射。对于通用类型,您必须转换为Object
或Object[]
。
Object
- &gt; Object[]
演员看起来非法。你可能只想要这样的直接演员:
public Object[] getAttribArray(RIORepeatingGrpEnum repeatingGrp)
{
Object[] grp = (Object[])getAttrib(repeatingGrp.toString());
return grp;
}