在已实现的方法上破解返回类型的最佳方法?

时间:2014-12-05 18:20:13

标签: java

我正在通过maven依赖实现服务,该依赖会获取数据并将其吐出到另一个虚拟位置,前提是它符合严格的类型要求。但是,我已经换掉了其中一个字段(让我们调用字段Buzz并执行它Buzzer)并且想知道我是否可以将其与其他字段一起使用的服务。

该服务是对工厂的调用,需要类型Buzz,而BuzzBuzzer之间的差异是一些额外添加的成员字段。有什么办法可以让工厂接受Buzzer吗?通过代码查看,该服务似乎没有做任何依赖于Buzz正确的哈希码的事情。

编辑:示例

class Buzz
{ 
   public String ID
   public String name
   public String title
   public Iterable<profile> profiles


   public myConstructor(String ID, String name, String title, Iterable profile)
   {
   this.var = var;
   }
}

class Buzzer
{
   public String ID
   public String name
   public String title
   public profile profiles

   public myConstructor(String ID, String name, String title, profile profiles)
   {
   this.var = var;
   }
}

其中profile是已定义的对象

1 个答案:

答案 0 :(得分:1)

如果你可以让Buzzer扩展Buzz,那将是理想的。

但是如果你不能(例如,如果它来自第三方库并被宣布为最终类),那么黑客解决方案将是“获取”一个Buzz实例(这将取决于特定的scenareo。需要更多信息更具体)。然后通过反射修改其buzz属性。

这样的事情:

String buzz = null;  // Assuming Buzz field is a string in this example
Field fBuzz = null;
try
{
    Class<?> cBuzz = theBuzzInstance.getClass();
    fBuzz = cBuzz.getDeclaredField( "buzz" );
    fBuzz.setAccessible( true );
    buzz = ( String ) fBuzz.get( theBuzzInstance );

    String newBuzz = "Hacked!";
    fBuzz.set( theBuzzInstance, newBuzz );
}
catch( Exception e )
{
    // TODO: Error handling
}