通过将对象作为参数传递来在方法中使用对象
Using an object in a method by passing it as a parameter
我面临涉及 class 和方法的情况。
为简单起见,假设您有 2 个 classes:A 和 B
在 class A 中,我有一个名为 "jumpOnOtherClass" 的方法。
在 class B 中,我有另一个方法叫做 "doThings".
我想要 class 方法将任何 class 的任何对象作为参数,以便它首先检查对象是否为 null(因此它可以创建一个新实例传递的对象),然后执行对象的class.
的一个方法
这是一个示例代码:
class MyMainClass
{
private A objectA = new A();
private B objectB;
public void main()
{
this.objectA.jumpOnOtherClass(this.objectB,"doThings");
}
}
class A
{
public void jumpOnOtherClass(Object objectFromAnyClass, String methodToInvoke)
{
if(objectFromAnyClass == null) objectFromAnyClass = new DefaultConstructorOfB();
objectFromAnyClass.getMethod(methodToInvoke);
}
}
class B
{
public void doThings()
{
//Do some stuff here
}
}
我知道有例外情况需要考虑,但对于这个例子,我们假设
class,方法存在并被发现:)
我用 "java.lang.reflect" 尝试过,但这似乎不是实现我尝试做的事情的好方法...
任何帮助都会非常好!
谢谢,祝你有愉快的一天!
我不完全确定我理解这个问题,但看起来您可能正在寻找一种方法来区分 类 最初作为对象传递的?您可以使用 instanceof 关键字,然后冒一些强制转换异常的风险
class MyMainClass
{
private A objectA = new A();
private B objectB;
public void main()
{
this.objectA.jumpOnOtherClass(this.objectB,"doThings");
}
}
class A
{
public void jumpOnOtherClass(Object objectFromAnyClass, String methodToInvoke)
{
if(objectFromAnyClass == null) objectFromAnyClass = new DefaultConstructorOfB();
else if (objectFromAnyClass instanceof B) {
if (methodToInvoke.equals("doThings"))
((B) objectFromAnyClass).doThings();
}
}
}
class B
{
public void doThings()
{
//Do some stuff here
}
}
唯一的问题是,如果引用为 null,您无法在运行时真正知道 "object" 的 class,因此您需要通过提供其他信息来解决此问题。
我建议这种方法(它确实涉及反射):
public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke)
throws
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException,
InstantiationException
{
if(objectFromAnyClass == null)
objectFromAnyClass = classType.getDeclaredConstructor().newInstance();
classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);
}
并像这样使用它:
jumpOnOtherClass(this.objectB, B.class, "doThings");
好的!我终于明白了!所以这是最终代码:
class A
{
public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
{
if(objectFromAnyClass == null)
{
println("instantiating");
objectFromAnyClass = classType.newInstance();
}
println("getting the method");
classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);
println("It works :D");
}
}
static class B
{
public void doThings()
{
println("message from class B");
}
}
问题实际上来自处理过程中的 class 嵌套(一般来说,任何 class 嵌套)。我从检查对象 b 是否为 null 的行中删除了 "getConstructor()" 。
也许有人可以在此 post 下解释为什么删除此方法后一切正常...我将尝试理解,如果我对此有所了解,那将是 post在这里!
再次感谢你们的帮助:D
祝你有愉快的一天!
Larry.K
我面临涉及 class 和方法的情况。
为简单起见,假设您有 2 个 classes:A 和 B
在 class A 中,我有一个名为 "jumpOnOtherClass" 的方法。 在 class B 中,我有另一个方法叫做 "doThings".
我想要 class 方法将任何 class 的任何对象作为参数,以便它首先检查对象是否为 null(因此它可以创建一个新实例传递的对象),然后执行对象的class.
的一个方法这是一个示例代码:
class MyMainClass
{
private A objectA = new A();
private B objectB;
public void main()
{
this.objectA.jumpOnOtherClass(this.objectB,"doThings");
}
}
class A
{
public void jumpOnOtherClass(Object objectFromAnyClass, String methodToInvoke)
{
if(objectFromAnyClass == null) objectFromAnyClass = new DefaultConstructorOfB();
objectFromAnyClass.getMethod(methodToInvoke);
}
}
class B
{
public void doThings()
{
//Do some stuff here
}
}
我知道有例外情况需要考虑,但对于这个例子,我们假设 class,方法存在并被发现:)
我用 "java.lang.reflect" 尝试过,但这似乎不是实现我尝试做的事情的好方法...
任何帮助都会非常好!
谢谢,祝你有愉快的一天!
我不完全确定我理解这个问题,但看起来您可能正在寻找一种方法来区分 类 最初作为对象传递的?您可以使用 instanceof 关键字,然后冒一些强制转换异常的风险
class MyMainClass
{
private A objectA = new A();
private B objectB;
public void main()
{
this.objectA.jumpOnOtherClass(this.objectB,"doThings");
}
}
class A
{
public void jumpOnOtherClass(Object objectFromAnyClass, String methodToInvoke)
{
if(objectFromAnyClass == null) objectFromAnyClass = new DefaultConstructorOfB();
else if (objectFromAnyClass instanceof B) {
if (methodToInvoke.equals("doThings"))
((B) objectFromAnyClass).doThings();
}
}
}
class B
{
public void doThings()
{
//Do some stuff here
}
}
唯一的问题是,如果引用为 null,您无法在运行时真正知道 "object" 的 class,因此您需要通过提供其他信息来解决此问题。
我建议这种方法(它确实涉及反射):
public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke)
throws
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException,
InstantiationException
{
if(objectFromAnyClass == null)
objectFromAnyClass = classType.getDeclaredConstructor().newInstance();
classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);
}
并像这样使用它:
jumpOnOtherClass(this.objectB, B.class, "doThings");
好的!我终于明白了!所以这是最终代码:
class A
{
public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
{
if(objectFromAnyClass == null)
{
println("instantiating");
objectFromAnyClass = classType.newInstance();
}
println("getting the method");
classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);
println("It works :D");
}
}
static class B
{
public void doThings()
{
println("message from class B");
}
}
问题实际上来自处理过程中的 class 嵌套(一般来说,任何 class 嵌套)。我从检查对象 b 是否为 null 的行中删除了 "getConstructor()" 。
也许有人可以在此 post 下解释为什么删除此方法后一切正常...我将尝试理解,如果我对此有所了解,那将是 post在这里!
再次感谢你们的帮助:D
祝你有愉快的一天!
Larry.K