我试图从method参数中获取实例或类名,如下所示:
public class Test {
public void getData (Class<T> type){
// Class type of instance of "type" method argument.
if(type instanceOf SomeClass) {
//Do something
}
}
}
我已经尝试了像getClass(),getSimpleClassName(),getName()等这样的reflation方法。这些方法都将类名返回为“Class”,实例返回“class java.lang.Class”。我需要它来将实例与某些类进行比较并进行必要的操作。
答案 0 :(得分:2)
您可以type == SomeClass.class
,但我发现您的代码有些臭。
我愿意:
Abstract<T>
方法介绍通用接口public void getData()
。例如:
public interface Abstract<T> {
public void getData();
}
T
的每个有效类型参数(随意限制它有一些限制),我会创建一个子类,其中getData()
方法的实现将只是代码中相应if
块的行为:例如:
public class SomeClassSpecific implements Abstract<SomeClass> {
public void getData() {
//specific implementation for SomeClass.
}
}
这样你最终会得到一些小的,易于测试和干净的类,其实现将涵盖if-else
方法的整个getData(Class<T> clazz)
主体。
答案 1 :(得分:1)
如果类型应该完全相同(等于String.class和String.class,则可以使用==或equals)
public class Test {
public void getData (Class<T> type){
// Class type of instance of "type" method argument.
if(type.equals(SomeClass.class) {
//Do something
}
}
}
如果类型通过继承相关,例如CharSequence.class和String.class,则可以使用assignableFrom
public class Test {
public void getData (Class<T> type){
// Class type of instance of "type" method argument.
if(SomeClass.class.isAssignableFrom(type) {
//Do something
}
}
}
答案 2 :(得分:-2)
您只需使用typeof函数。
Type t=typeof(T);
谢谢。