标签: instanceof

在Javascript中实现isInstance

我定义了两个函数如何相互继承,如下所示:

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专家,我的代码是否有任何改进(继承方法,也许)?

谢谢.

javascript inheritance instanceof

0
推荐指数
1
解决办法
2244
查看次数

在泛型方法<T> doSth(List <T> l)中,检查T是否实现了Comparable?

标题基本上说明了一切:如果我有一个在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)

任何提示?

非常感谢,

约翰内斯

java generics instanceof

0
推荐指数
1
解决办法
6117
查看次数

避免instanceof - 不可修改的类

假设我有两个班A,并B使得B extends A分别实现方法getA,并getB具有相同的输入参数类型和相同的返回类型(但不同的名称).在方法public static <T extends A> void print(T t)得到作为输入类型的对象AB,我想调用getA如果对象是类的A或者getB如果对象是类的B.

如果我能编辑的代码AB我想使他们实现一个接口I提供getValue()(在实施AB,getValue()会叫木屐()和getB()RESP),然后调用此方法print().问题是:A类和B类不可修改!.没有方法可以添加或更改,它们的类层次结构是固定的,我没有编写他们的代码,我也没有访问源代码.

请注意,这也适用于案件的时候-以任何理由-我不希望改变的代码AB.

有没有办法在没有使用的情况下这样做instanceof

以下是使用instanceof(坏!)的解决方案.

public class Test {

    public static <T extends A> void print(T t){
        if (t instanceof B) …
Run Code Online (Sandbox Code Playgroud)

java instanceof

0
推荐指数
1
解决办法
150
查看次数

Java - instanceof的替代方案?

我有一个Shape超类和一个NestedShape子类.该NestedShape亚类具有一个ArrayList(" ShapesList")的Shapes被嵌套在.我需要实现一个'包含'的方法NestedShape.给定一个Shape对象时,该方法应检查该形状是否存在于NestedShapes中ShapeList.我现在的实现非常简单:只需调用ArrayList .contains()方法即可ShapesList.

然而,"包含"方法我也需要实施有检查,对于任何NestedShapeShapesList,那个形状的ShapeList同时不包含被搜索的形状.我这样做的最明显的方法是使用instanceof检查每个ShapeShapeListNestedShape.然后,我猜我会递归调用我的'contains'方法,如果它是一个NestedShape.但是,我不确定这是否是一个很好的方法 - 我听说使用instanceof是不赞成的(同样,我不确定我的使用递归的想法是否会起作用).

有谁能建议一个更好的方法来解决这个问题?

谢谢 :)

java recursion nested instanceof

0
推荐指数
1
解决办法
707
查看次数

在toString中使用equals或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)

java clone equals instanceof tostring

0
推荐指数
1
解决办法
658
查看次数

测试Object是否是特定类型的通用列表

由于各种原因,我的方法接受泛型Object参数.该方法的作用取决于实际类型,因此我做了一些实例

现在,在一个特定的情况下,我需要检查类型是否是Iterable.

我发现带有泛型的instanceof不起作用.

x instanceof Iterable<Integer>
Run Code Online (Sandbox Code Playgroud)

那么除了循环每个元素并测试它们的类型之外,有哪些替代方案呢?

java generics instanceof

0
推荐指数
1
解决办法
391
查看次数

如何获取对象的类名

代码:

$troll instanceof TrollClass
Run Code Online (Sandbox Code Playgroud)

检查是否$troll是实例TrollClass.

如何判断哪个类$troll是实例?

$troll instanceof XXXX
Run Code Online (Sandbox Code Playgroud)

我该怎么XXXX办?

php instanceof

0
推荐指数
1
解决办法
53
查看次数

Java 8:结合了instanceof和三元运算符的奇怪结果

我正在编写一个方法,其中所有参数都是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)

奇怪的是这个代码总是设置zeroZERO_D.

我目前正在使用以下代码成功解决此问题:

Number zero;
if (stepSize instanceof Double) {
  zero = ZERO_D;
} else {
  zero = ZERO_I;
}
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么我得到这个奇怪的结果?如果可以的话,我更愿意在这里使用三元运算符.

java instanceof ternary-operator

0
推荐指数
1
解决办法
729
查看次数

如何使instanceof区分子类和父类?

在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)

java inheritance instanceof

0
推荐指数
1
解决办法
319
查看次数

如何检查"?" SomeInterface的Class <?>对象实例

简单- -问题,但我开始想我想要实现的东西走错了路.假设我有一个Method正确初始化的对象.

我需要检查该方法是否会返回实现该Comparable接口的对象.

问题是method.getReturnType()返回一个Class<?>对象,我想检查一下这个"?" 实际上是可比较的实例,但我不能写? instanceof Comparable,怎么会这样做呢?

编辑:我知道我可以做result = method.invoke(someObject),然后result instanceof Comparable我需要在我更大的对象的构造函数中进行这些检查,如果我清楚的话,不知道.

java generics reflection instanceof

0
推荐指数
1
解决办法
38
查看次数