2016-02-14 20 views
5
esempio

codice C#:java equivalente a C# ExpandoObject

dynamic MyDynamic = new System.Dynamic.ExpandoObject(); 
MyDynamic.A = "A"; 
MyDynamic.B = "B"; 
MyDynamic.C = "C"; 
MyDynamic.Number = 12; 
MyDynamic.MyMethod = new Func<int>(() => 
{ 
    return 55; 
}); 
Console.WriteLine(MyDynamic.MyMethod()); 

Java:?

Qualche idea perché java non supporta questo scenario?

+0

Perché non è un linguaggio di scripting? Apparentemente, C# è. Non avevo sentito parlare di questa funzione. –

+0

Sono un po 'confuso, mi chiedi perché Java non ha la stessa sintassi esatta o hai uno scenario più specifico in mente che questo codice potrebbe risolvere e sospetti che non sarebbe fattibile in Java? –

+0

@JoachimIsaksson si prega di dare un'occhiata nella mia risposta per segnare, grazie :) – User1234

risposta

2

Java è molto più rigido in questo caso. Quindi la risposta breve è no, Java non ha Expando. La sintassi non lo supporta.

Tuttavia c'è un Expando in Groovy che è un linguaggio dinamico su java.

BTW, Se utilizzi Expando per i test, ci sono molte varie soluzioni correlate a Mock: EasyMock, Mockito, JMock per citarne alcuni.

Spero che questo aiuti

+0

@ Marco grazie, non per il test. Voglio serializzare due istanze in una stringa json (usando gson), ho fatto lo stesso con l'uso di Expando in C# e questo era semplice e veloce (e forse sporco), in java sembra che avrò bisogno di avere una classe compsite per rappresenti quelle istanze, classe che non userò. – User1234

+0

@ user310291 No, volevo solo dire che non consente un comportamento così dinamico. L'invocazione dinamica può essere costosa e causare un comportamento lento in runtime (troppe istruzioni da eseguire da JVM). Ci sono alternative come Groovy o Scala. In ogni caso l'obiettivo non è una guerra santa qui. –

+0

@ User1234. Ok, in questo caso è meglio usare Json semplice. Forse troverai questo utile: http://www.mkyong.com/java/json-simple-example-read-and-write-json/ –