标签: instanceof

Java对象的最具体的子类?

我有两个类A和B,其中B是A的子类,A不是抽象的.因此,我可以拥有作为A实例的对象和作为B实例的对象(因此也是A的实例).

如何区分仅为A实例的对象?

当然,我可以编写类似"对象instaceof A &&!(B的对象实例)"但这是一个非常糟糕的设计,因为每次我向A添加新的子类时我都需要更改代码.更好的选择?

java inheritance instanceof

2
推荐指数
2
解决办法
2917
查看次数

在这种情况下如何替换instanceof?

我想比较compareCriteria.简单的比如'between'和'inArray'或'greaterThan'.我对这些类使用多态.他们从compareCriteria接口共享的一种方法是'matchCompareCriteria'.

我想避免的是让每个班级检查他们应该匹配的compareCriteria的类型.例如,inArray对象将检查matchCompareCriteria是否传入inArray对象,否则它将返回false,如果它知道如何比较.

也许在这种情况下,instanceof是完全合法的(对象知道自己),但我仍然在寻找避免它的可能方法.有任何想法吗?

伪代码示例:

betweenXandY = create new between class(x, y)
greaterThanZ = create new greaterThan class(z)
greaterThanZ.matchCompareCriteria(betweenXandY)
Run Code Online (Sandbox Code Playgroud)

如果X和Y大于Z,它将返回true.

编辑:

1)instanceof就是我现在所看到的,匹配matchCompareCriteria方法.我想摆脱它

2)matchCompareCritera检查另一个是否包含compareCriteria.如果一个的所有可能值都包含在另一个中,则返回true.对于compareCriteria的许多组合,比较它们甚至没有意义,因此它们返回false(比如betweenAlfa和betweenNum之间是不兼容的).

oop polymorphism criteria instanceof

2
推荐指数
2
解决办法
1803
查看次数

Java:应该如何看看instanceof方法

想象一下,我想写一个无用的方法叫:isInstanceof返回一个boolean.
我在考虑它.但是我没有离开.一个instanceof有一个像使用:

[object] instanceof [a classname]

// I was thinking about something like this
public static boolean isInstanceof(Object obj, /*magic for the second param*/)
{
   return obj instanceof /*the magical second param*/
}
Run Code Online (Sandbox Code Playgroud)

但是我如何为参数制作参数[a classname]?有没有办法做到这一点没有方法isInstance(Class cls)java.lang.Class

谢谢

java instanceof

2
推荐指数
1
解决办法
1409
查看次数

在Java中使用instanceof时导致"不兼容的条件操作数"的原因是什么?

可能重复:
instanceof - 不兼容的条件操作数类型

我试图使用下面的代码并获得编译错误.

Class<A> clas; //this is passed from service 
clas instanceof SomeClass
Run Code Online (Sandbox Code Playgroud)

这给ma带来了以下编译错误:

不兼容的条件操作数类型Class和SomeClass

请帮我!

java compiler-errors instanceof

2
推荐指数
1
解决办法
8512
查看次数

在equals方法中避免使用instanceof的可行方法?

许多人不喜欢使用instanceof,但我发现在很多情况下,我们在equals方法方面几乎没有其他选择.看看下面的课程:

class A {   
    int n;
    public A(int n) { this.n = n; }

    @Override
    public boolean equals(Object o) {
        return false;
    }

    public boolean equals(A o) {
        return n == o.n;
    }   
}
Run Code Online (Sandbox Code Playgroud)

我从来没有见过像这样的东西,但它可以作为一个替代品,instanceof用来测试一个Object是不是A?或者还有其他我没想过的问题?

java equals instanceof

2
推荐指数
1
解决办法
417
查看次数

在Java中迭代父类的ArrayList时使用Subclass方法

在这个循环中,我迭代一个类型的ArrayList Entity,它包含Entity类型的对象以及Projectile类型的对象,它扩展了Entity.如果对象是Projectile的实例,我希望执行下面的代码.但是,该getVelocity()方法仅在子类Projectile中,而不在Entity中.所以我无法编译下面的代码.

我可以想办法解决这个问题,比如使用单独的ArrayLists.但是,重点是将所有实体保留在全局列表中而不是将它们分开.有这个问题的简单解决方案,还是我需要更改代码的结构?

for (Entity f: glo.getList()) {
           if (f instanceof Projectile)
              f.setX(f.getVelocity()/rawFPS);
        }
Run Code Online (Sandbox Code Playgroud)

java methods arraylist instanceof

2
推荐指数
1
解决办法
1910
查看次数

Java - 使用instanceof条件的其他许多if语句的替代

我有这个凌乱的代码,我真的想要清理,因为它有大约12个if if和每个if语句检查instanceof 2对象,所以类似于:if(parentObj instanceof superclass && parentObj2 instanceof superclass)

每个if语句执行不同的东西,所以我认为多态性不会让它变得更好.此外,因为这个小功能的12个不​​同的超类(大多数if语句执行1个衬里)会有点荒谬.多态无效的另一个原因是因为我无法访问父类或超类.我知道很多情况都不好,即使我从来没有真正理解为什么.在每个if语句中执行的方法不是父类,而是属于超类,因此我需要检查它们的类型,以便我可以转换它们并执行这些方法.关于如何清理它的任何想法?谢谢!

编辑:抱歉缺乏细节,我在手机上写了这个.无论如何,下面是我正在处理的一个例子.我看过战略模式,我唯一担心的是出于同样的原因,我必须创建许多不同的类,我觉得创建许多不同的对象只是为了一直执行1个衬里会有点浪费.另外在我看来,在策略设计中,我仍然需要进行许多实例检查以了解要执行的策略.无论如何,下面是一些代码:p

if (plotBlockState instanceof Sign && UpgradeBlockState instanceof Sign) {
    //do Sign Stuff
}
else if (plotBlockState instanceof Chest && UpgradeBlockState instanceof Chest) {
    //do Chest Stuff
}
else if (plotBlockState instanceof Dispenser && UpgradeBlockState instanceof Dispenser) {
    //do Dispenser Stuff
}
else if (plotBlockState instanceof Furnace && UpgradeBlockState instanceof Furnace) {
    //do Furnace Stuff
}
else if (plotBlockState instanceof BrewingStand && UpgradeBlockState instanceof BrewingStand) {
    //do Brew Stand Stuff …
Run Code Online (Sandbox Code Playgroud)

java object instanceof

2
推荐指数
1
解决办法
4501
查看次数

检查一个对象是否与此类相同?

我在Java中有多个数据对象类型的基类.我想equals在基类中创建一个方法,它在继承时直接工作.

平等由两个对象决定

  1. 属于基类的子类.这很容易实现

    if (!(anObject instanceof BaseClass))
        return false;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 具有相同的ID.ID字段由基类定义,因此我们可以在此测试.

    if (this.id != ((BaseClass) anObject).id)
        return false;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 属于同一类.这就是我遇到问题的地方.两个对象可以是不同类型的(因此可以在不同的列表中),但具有相同的ID.我必须能够区分它们.我怎样才能做到这一点?

java class instanceof

2
推荐指数
1
解决办法
6803
查看次数

为什么在instanceof运算符上编译时间错误但在转换时工作正常

我的问题是,既然 new Test()既不是子类,String也不是String本身那么instanceof编译失败的原因呢?它不应该返回虚假.

    public class Test{
        public static void main(String[] args) {
       //Compiles fails
       System.out.println(new Test() instanceof String);
      //compiles fine but run time class cast exception.   
        Test = (Test) new Object();;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我已经编辑了我的帖子,所以这就是我真正想知道为什么会有这种差异.为什么编译没有失败,尽管它应该

java instanceof

2
推荐指数
1
解决办法
96
查看次数

Instanceof不会显示带有接口的编译错误,但是带有抽象类会显示

我认为标题是不言自明的。因此,假设我有以下代码:

interface A { }

abstract class B { }

class C { }

C c = new C();

System.out.println(c instanceof A); //fine
System.out.println(c instanceof B); // compile error
Run Code Online (Sandbox Code Playgroud)

这个问题的评论中,我读到:

编译器永远无法知道给定类型是否未实现接口,因为潜在的子类可以实现该接口。

因此,如果interface此方法有效,为什么它不应该适用abstract class?它也应该由其他类进行扩展,因为它本身不能存在。有人可以澄清吗?

更新 编译消息:

错误:(22、28)Java:不兼容的类型:C无法转换为B

java instanceof

2
推荐指数
1
解决办法
64
查看次数