Categories
discuss

What are the differences between “generic” types in C++ and Java?

Java has generics and C++ provides a very strong programming model with templates. So then, what is the difference between C++ and Java generics?

Answer

There is a big difference between them. In C++ you don’t have to specify a class or an interface for the generic type. That’s why you can create truly generic functions and classes, with the caveat of a looser typing.

template <typename T> T sum(T a, T b) { return a + b; }

The method above adds two objects of the same type, and can be used for any type T that has the “+” operator available.

In Java you have to specify a type if you want to call methods on the objects passed, something like:

<T extends Something> T sum(T a, T b) { return a.add ( b ); }

In C++ generic functions/classes can only be defined in headers, since the compiler generates different functions for different types (that it’s invoked with). So the compilation is slower. In Java the compilation doesn’t have a major penalty, but Java uses a technique called “erasure” where the generic type is erased at runtime, so at runtime Java is actually calling …

Something sum(Something a, Something b) { return a.add ( b ); }

So generic programming in Java is not really useful, it’s only a little syntactic sugar to help with the new foreach construct.

EDIT: the opinion above on usefulness was written by a younger self. Java’s generics help with type-safety of course.

Categories
discuss

XML serialization in Java? [closed]

What is the Java analogue of .NET’s XML serialization?

Answer

2008 Answer
The “Official” Java API for this is now JAXB – Java API for XML Binding. See Tutorial by Oracle. The reference implementation lives at http://jaxb.java.net/

2018 Update
Note that the Java EE and CORBA Modules are deprecated in SE in JDK9 and to be removed from SE in JDK11. Therefore, to use JAXB it will either need to be in your existing enterprise class environment bundled by your e.g. app server, or you will need to bring it in manually.

Source: stackoverflow
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Privacy Policy, and Copyright Policy. Content is available under CC BY-SA 3.0 unless otherwise noted. The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 © No Copyrights, All Questions are retrived from public domain..