In Delphi there are the so called class references:
type
TSomeClass = class(TAncestorClass)
.
.
end;
// They are declared with some weird syntax: (I know Java has no type declarations)
type
TSomeClassReference = class Of TSomeClass;
Stated such declaration, it can be used as an argument
// you can pass TSomeClassReference or any descendant class this function
function ClassFactory (pClassToCreate : TSomeClassReference) : TSomeClass;
// invoke with
var
A : TSomeClass;
B : TSomeClassDerivedFromTSomeClass;
A := ClassFactory (TSomeClass);
B := ClassFactory (TSomeClassDerivedFromTSomeClass);
B := ClassFactory (TAnotherClass); // wrong!
or instance variable
TAnotherClass = class(TAnyClassNotDerivedFromTSomeClass)
.
.
// same: can hold reference to TSomeClass or any descendant
FDriverClass : TSomeClassReference;
end;
var
A : TAnotherClass;
A.FDriverClass := TSomeClass;
A.FDriverClass := TSomeClassDerivedFromTSomeClass;
A.FDriverClass := TAnotherClass; // wrong!
I heavyly use such class references in Delphi for creating class factories among other things. Is there a syntax in Java for doing this? I mean something like
public TSomeClass ClassFactory (pClassToCreate TSomeClassReference)
{...}
or
public class TAnotherClass extends TAnyClass {
TSomeClassReference FDriverClass;
}
java.lang.Class<T>thoughfluffon SO and discouraged.