Путь Java будет выглядеть примерно так:
public interface Trasnformer<F, T>
{
T transformFrom(F original);
}
тогда есть классы вроде:
public class IntegerStringTransofromer<Integer, String>
{
public String transformFrom(Integer original)
{
// code
}
}
Я уверен, что вы можете придумать что-то более похожее на то, что вы действительно пытаетесь сделать, но это не совсем естественный способ сделать это в Java. Как правило, когда вы переключаетесь на разные стили языков, вам нужно переключиться на подход к решению проблем. Я уверен, что Perl-программа, написанная как Java-программа, была бы странной вещью ... так же, как Java-программа, написанная как Perl-программа.
Вздох ... несмотря на мое, лучшее суждение ... вот решение, которое делает то, что вы просите (ну, не совсем, но это начало) ... все, что я прошу, это чтобы вы его не использовали!
class Copier
{
public static void copyFromTo(final Object source,
final Object dest)
{
final Class sourceClass;
final Class destClass;
final Field[] sourceFields;
sourceClass = source.getClass();
destClass = dest.getClass();
sourceFields = sourceClass.getDeclaredFields();
for(final Field field : sourceFields)
{
copyField(field, source, dest, destClass);
}
}
private static void copyField(final Field field,
final Object source,
final Object dest,
final Class destClass)
{
final String fieldName;
final String methodName;
fieldName = field.getName();
methodName = "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
try
{
final Method method;
method = destClass.getMethod(methodName, field.getType());
field.setAccessible(true);
method.invoke(dest, field.get(source));
}
catch(final NoSuchMethodException ex)
{
// ignore it
ex.printStackTrace();
}
catch(final IllegalAccessException ex)
{
// ignore it
ex.printStackTrace();
}
catch(final IllegalArgumentException ex)
{
// ignore it
ex.printStackTrace();
}
catch(final InvocationTargetException ex)
{
// ignore it
ex.printStackTrace();
}
}
}
и вот как это использовать (опять же, пожалуйста, не надо).
public class Main
{
public static void main(String[] args)
{
final B b;
b = new B();
Copier.copyFromTo(new A(), b);
System.out.println("b.a = " + b.getA());
System.out.println("b.b = " + b.getB());
System.out.println("b.c = " + b.getC());
System.out.println("b.d = " + b.getD());
System.out.println("b.e = " + b.getE());
}
}
class A
{
private String a = "This";
private String b = "Is";
private String c = "A";
private String d = "Bad";
private String e = "Idea";
}
class B
{
private String a;
private String b;
private String c;
private String d;
private String e;
public void setA(final String val)
{
a = val;
}
public void setB(final String val)
{
b = val;
}
public void setC(final String val)
{
c = val;
}
public void setD(final String val)
{
d = val;
}
public void setE(final String val)
{
e = val;
}
public String getA()
{
return (a);
}
public String getB()
{
return (b);
}
public String getC()
{
return (c);
}
public String getD()
{
return (d);
}
public String getE()
{
return (e);
}
}