如果我有类似的东西
$( ".status_change_inactive" ).click(function() {
var id = $(this).val();
$.ajax({
type:'GET',
url:"{{ url('ajax/status_change_inactive') }}",
data:{campaign_id : id},
success:function(data) {
$('#status_td span').remove();
trHTML = '<span class="status label label-danger">Inactive</span>';
$('#status_td').append(trHTML);
}
});
});
通过如下实现的功能:
public class OwnerClass1{
public class OwnedClass{
// definition 1
}
}
public class OwnerClass2{
public class OwnedClass{
// definition 2
}
}
如何获得以下行为:
public <OwnedClass> boolean doStuff(OwnedClass example) {
System.out.println(example.<???>);
// example.getClass() returns "OwnerClass1$OwnedClass" etc here, so I guess getting this to string and trimming after $ would be one solution
// example.getSuperClass() returns "java.lang.Object" here, so not what I need
}
注意:上面的代码旨在提供结构的粗略概念,而不是即兴编译。
答案 0 :(得分:2)
我知道您希望独特的doStuff
方法根据传递给它的参数的实际类的类而有所不同。
要想做到这一点,OwnedClass1
和OwnedClass2
必须扩展一个通用的类或接口(我想您称之为OwnedClass
)。否则,您的doStuff
将必须以Object
作为参数。
然后,您可以使用instanceof
区分类别。
带有对象的示例:
public boolean doStuff(Object example) {
if (example instanceof OwnedClass1) {
System.out.println("this is a class 1!");
} else if (example instanceof OwnedClass2) {
System.out.println("this is a class 2!");
} else {
throw new RuntimeException("Not supported : " + example.getClass());
}
}
如果您只对类的简称感兴趣,则可以这样:
public boolean doStuff(Object example) {
System.out.println("this is a " + example.getClass().getName());
}
甚至
public boolean doStuff(Object example) {
System.out.println("this is a " + example.getClass().getName().replaceAll(".*\\.", ""));
}
HTH!
答案 1 :(得分:1)
这两个OwnedClass子类都可以继承另一个类,您可以将其传递给doStuff。
public class OwnerClass1 {
public class OwnedClass extends SuperOwnedClass {
// definition 1
}
}
public class OwnerClass2 {
public class OwnedClass extends SuperOwnedClass {
// definition 2
}
}
public class SuperOwnedClass {
}
public boolean doStuff(SuperOwnedClass example) {
System.out.println(example.<???>);
}
甚至更好,让他们实现接口。
答案 2 :(得分:1)
OwnedClass
不会扩展OwnerClass1
,而只会扩展Object
类。您最有可能正在寻找getEnclosingClass()
方法而不是getSuperClass()
。
public boolean doStuff(Object example) {
System.out.println(example.getClass().getEnclosingClass());
}