我定义了两个函数如何相互继承,如下所示:
Function.prototype.inherit = function(parent){
function proto() {}
proto.prototype = parent.prototype;
this.prototype = new proto();
this.prototype.constructor = this;
this.prototype.parent = parent;
Run Code Online (Sandbox Code Playgroud)
}
然后我需要定义一个isInstance函数,它的行为类似于Java的instanceOf或PHP的instanceof.实质上,isInstance可用于确定变量是否是从父函数继承的函数的实例化对象.
这就是我写的:
Function.prototype.isInstance = function(func){
if(this == func){
return true;
} else{
if (this.prototype.parent == undefined || this.prototype.parent == null) {
return false;
} else {
return this.prototype.parent.isInstance(func);
}
}
Run Code Online (Sandbox Code Playgroud)
}
这在比较两个函数时工作正常,但在比较实例化变量时则不行.
Object2.inherit(Object1);
Object2.isInstance(Object1); //returns true
var obj2 = new Object2();
obj2.isInstance(Object1);// obj2.isInstance is not a function
Run Code Online (Sandbox Code Playgroud)
上面的最后一个案例是我想要的工作.如何将isInstance添加到实例,而不仅仅是函数?对于那里的所有javascript专家,我的代码是否有任何改进(继承方法,也许)?
谢谢.
标题基本上说明了一切:如果我有一个在T中是通用的java方法,我可以找到关于T的任何内容吗?特别是,我可以检查T是实现某个接口还是扩展某个类?
我想做点什么
public <T> List<T> doSth(List<T> l) {
if(T extends Comparable) {
// do one thing
} else {
// do another
}
return l;
}
Run Code Online (Sandbox Code Playgroud)
任何提示?
非常感谢,
约翰内斯
假设我有两个班A,并B使得B extends A分别实现方法getA,并getB具有相同的输入参数类型和相同的返回类型(但不同的名称).在方法public static <T extends A> void print(T t)得到作为输入类型的对象A或B,我想调用getA如果对象是类的A或者getB如果对象是类的B.
如果我能编辑的代码A和B我想使他们实现一个接口I提供getValue()(在实施A和B,getValue()会叫木屐()和getB()RESP),然后调用此方法print().问题是:A类和B类不可修改!.没有方法可以添加或更改,它们的类层次结构是固定的,我没有编写他们的代码,我也没有访问源代码.
请注意,这也适用于案件的时候-以任何理由-我不希望改变的代码A和B.
有没有办法在没有使用的情况下这样做instanceof?
以下是使用instanceof(坏!)的解决方案.
public class Test {
public static <T extends A> void print(T t){
if (t instanceof B) …Run Code Online (Sandbox Code Playgroud) 我有一个Shape超类和一个NestedShape子类.该NestedShape亚类具有一个ArrayList(" ShapesList")的Shapes被嵌套在.我需要实现一个'包含'的方法NestedShape.给定一个Shape对象时,该方法应检查该形状是否存在于NestedShapes中ShapeList.我现在的实现非常简单:只需调用ArrayList .contains()方法即可ShapesList.
然而,"包含"方法我也需要实施有检查,对于任何NestedShape在ShapesList,那个形状的ShapeList同时不包含被搜索的形状.我这样做的最明显的方法是使用instanceof检查每个Shape在ShapeList是NestedShape.然后,我猜我会递归调用我的'contains'方法,如果它是一个NestedShape.但是,我不确定这是否是一个很好的方法 - 我听说使用instanceof是不赞成的(同样,我不确定我的使用递归的想法是否会起作用).
有谁能建议一个更好的方法来解决这个问题?
谢谢 :)
好吧,我有一个带有'MartianManager'类的程序:*注意代码不完整仍然有一些缺失的部分只是提供了整个代码,以供参考完成后它将如何完成
import java.util.ArrayList;
public class MartianManager {
private ArrayList<Martian> martians;
private ArrayList<Martian> teleporters;
public void addMartian(Martian m) {
martians.add(m);
if(m instanceof GreenMartian)
teleporters.add(m);
}
//public Object clone() {
public Martian getMartianClosestToID(int id) {
}
public void groupSpeak() {
for(Martian m : martians) {
m.speak();
}
}
public void groupTeleport(String dest) {
}
}
Run Code Online (Sandbox Code Playgroud)
和火星类:
public abstract class Martian implements Cloneable {
int id;
public Martian(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
} …Run Code Online (Sandbox Code Playgroud) 由于各种原因,我的方法接受泛型Object参数.该方法的作用取决于实际类型,因此我做了一些实例
现在,在一个特定的情况下,我需要检查类型是否是Iterable.
我发现带有泛型的instanceof不起作用.
x instanceof Iterable<Integer>
Run Code Online (Sandbox Code Playgroud)
那么除了循环每个元素并测试它们的类型之外,有哪些替代方案呢?
代码:
$troll instanceof TrollClass
Run Code Online (Sandbox Code Playgroud)
检查是否$troll是实例TrollClass.
如何判断哪个类$troll是实例?
$troll instanceof XXXX
Run Code Online (Sandbox Code Playgroud)
我该怎么XXXX办?
我正在编写一个方法,其中所有参数都是doubles或ints.由于两个重载的内部代码都相同,我认为编写接口接受Numbers 会更容易.
我需要在此方法中做的一件事是验证其中一个参数大于零.为了实现这一点,我可以compare()将传递的值反对为零,我有以下静态字段:
private static final Double ZERO_D = Double.valueOf(0);
private static final Integer ZERO_I = Integer.valueOf(0);
Run Code Online (Sandbox Code Playgroud)
在相关方法中,我然后尝试执行此测试:
Number zero = ((stepSize instanceof Double) ? ZERO_D : ZERO_I);
Run Code Online (Sandbox Code Playgroud)
奇怪的是这个代码总是设置zero为ZERO_D.
我目前正在使用以下代码成功解决此问题:
Number zero;
if (stepSize instanceof Double) {
zero = ZERO_D;
} else {
zero = ZERO_I;
}
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我得到这个奇怪的结果?如果可以的话,我更愿意在这里使用三元运算符.
在java LinkedHashSet扩展中,HashSet
我有一个代码编写为:
import java.util.*;
class SetInterfaceUsage
{
static <Obj> void display(Obj myList)
{
if(myList instanceof HashSet)
System.out.println("Hash Set contains : " + myList + " ......order based on Hashing");
else if(myList instanceof LinkedHashSet)
System.out.println("Linked List contains : " + myList + " ......In inserted order.");
else if(myList instanceof TreeSet)
System.out.println("Tree Set contains : " + myList + " ......Ascending order.");
}
public static void main(String X[])
{
/* HashSet */
Set hs = new HashSet();
hs.add(2001);
hs.add(':'); …Run Code Online (Sandbox Code Playgroud) 简单- 找 -问题,但我开始想我想要实现的东西走错了路.假设我有一个Method正确初始化的对象.
我需要检查该方法是否会返回实现该Comparable接口的对象.
问题是method.getReturnType()返回一个Class<?>对象,我想检查一下这个"?" 实际上是可比较的实例,但我不能写? instanceof Comparable,怎么会这样做呢?
编辑:我知道我可以做result = method.invoke(someObject),然后result instanceof Comparable我需要在我更大的对象的构造函数中进行这些检查,如果我清楚的话,不知道.
instanceof ×10
java ×8
generics ×3
inheritance ×2
clone ×1
equals ×1
javascript ×1
nested ×1
php ×1
recursion ×1
reflection ×1
tostring ×1