2017-11-23 10 views
1

ジェネリッククラスの属性に値を割り当てるには汎用メソッドが必要です。私はもっ​​と説明するために例を挙げます。私が思う、私は必要な方法は、そのようなものでなければなりません:ジェネリッククラスのジェネリックメソッドの属性に値を代入する - Java

import java.util.function.Function; 
public class Utilities { 

public static <T> Object assignValueToAttribute(Object MY_Object__Arg, Function<T, ?> MY_AttributeValueExtractor_Arg, Object MY_AttributeValueToEqual_Arg) { 
    return .... 
} 

}

例:

のは私ではないSTATICメソッドと「車」と呼ばれるクラスを持っているとしましょう「setColorを()」 。

: 私の一般的な方法は、私の一般的な方法は、そのような何かを呼び出すことができ

myCar.setColor("red"); 

、車のistanceを返すのは、「てmyCar」を言わせて、属性「色」で「赤」の値を割り当てる必要があります

Car myCar= (Car) Utilities.assignValueToAttribute(myCar, oggetto -> oggetto.setColor(), "red"); 

問題:私はあなたが近かった...

+0

リフレクションの使用はどうですか?それは少なくともできる限り一般的なものである。 – pirho

+0

オブジェクトは、非常に単純なクラスの属性であり、属性色を持つ "Car"と、メソッドgetColor()、setColor()、属性モデル、およびメソッドgetModel()、setModel()、等... 次に、メソッド "setType(9 'と' getType() 'を持つ属性" type "を持つ" Bycicle "などの他の単純なクラスを作成します。 他のクラス... – Fausto70

+0

私はとても専門家ではありません、私は非常に理解していませんでした...コードを書くかもしれませんか? – Fausto70

答えて

2

をそのメソッドをコーディングするホット知りません。あなたはオブジェクト(Bean)の型と値の型の2つの汎用型が必要です。関数ではなくBiConsumerが必要です。これは、set-methodが何も返さないためです。再割り当てmyCarは無意味です

assignValueToAttribute(myCar, Car::setColor, "red"); 

注:

public static <T, V> T assignValueToAttribute(T obj, BiConsumer<T, V> attributeSetter, V value) { 
    attributeSetter.accept(obj, value); 
    return obj; 
} 

その後、としてそれを呼び出すことができます。これはメソッド呼び出しの前と同じオブジェクトです。

+0

あなたは私を救った、 ,,私は試してみると私は受け入れるよ... – Fausto70

+0

私は確認...それは動作します! – Fausto70

関連する問題