相关疑难解决方法(0)

在Java中使用instanceof的性能影响

我正在开发一个应用程序,一种设计方法涉及对instanceof操作员的极大使用.虽然我知道OO设计通常会试图避免使用instanceof,但这是一个不同的故事,这个问题纯粹与性能有关.我想知道是否有任何性能影响?是这么快==吗?

例如,我有一个包含10个子类的基类.在一个获取基类的函数中,我会检查该类是否是子类的实例并执行一些例程.

我想解决它的另一种方法是使用"type id"整数原语,并使用位掩码来表示子类的类别,然后只需对子类"type id"进行掩码比较.表示类别的常量掩码.

instanceof莫名其妙地由JVM优化得比较快?我想坚持使用Java,但应用程序的性能至关重要.如果之前一直走在这条路上的人可以提供一些建议,那将会很酷.我是在挑剔太多还是专注于错误的事情来优化?

java performance instanceof

299
推荐指数
11
解决办法
11万
查看次数

在java中使用"Instance of"

什么是'instanceof'运算符用于?

我了解到Java有instanceof运营商.你能详细说明它的使用地点和优势吗?

java instanceof operators

292
推荐指数
4
解决办法
86万
查看次数

java:Class.isInstance vs Class.isAssignableFrom

clazz一些Classobj一些Object.

clazz.isAssignableFrom(obj.getClass())
Run Code Online (Sandbox Code Playgroud)

总是一样的

clazz.isInstance(obj)
Run Code Online (Sandbox Code Playgroud)

如果没有,有什么区别?

java

221
推荐指数
4
解决办法
15万
查看次数

确定类是否在Java中实现接口

我有一个Class对象.我想确定Class对象表示的类型是否实现了特定的接口.我想知道如何实现这一目标?

我有以下代码.基本上它的作用是获取指定包中所有类的数组.然后我想通过数组并将实现接口的Class对象添加到我的地图中.问题是isInstance()将对象作为参数.我无法实例化一个接口.所以我对此感到很茫然.有任何想法吗?

Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(clazz.isInstance(/*Some object*/)) //Need something in this if statement
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
Run Code Online (Sandbox Code Playgroud)

java reflection

79
推荐指数
3
解决办法
6万
查看次数

Java通用类 - 确定类型

如果我创建一个通用的java类,例如:

public class Foo<T>
Run Code Online (Sandbox Code Playgroud)

如何确定那个类的内部,'T'到底是什么?

public ???? Bar()
{
    //if its type 1
    //    do this
    //if its type 2
    //    do this
    //if its type 3
    //    do this
    //if its type 4
    //    do this
}
Run Code Online (Sandbox Code Playgroud)

我已经开始使用Java API并使用Reflection的东西,instanceof,getClass,.class等,但我似乎无法对它们做出正面或反面.我觉得我很接近,只需要结合一些电话,但不断提出来.

更具体地说,我试图确定该类是否使用3种可能类型之一进行实例化.

java generics

49
推荐指数
3
解决办法
7万
查看次数

Java中C#关键字'as'的等价物

在Java中,null如果转换失败,是否可以尝试强制转换并返回?

c# java casting

28
推荐指数
3
解决办法
1万
查看次数

Java工厂模式与泛型

我希望我BallUserInterfaceFactory返回一个具有正确泛型类型的用户界面的实例.我被困在下面的例子中得到错误:

绑定不匹配:BallUserInterfaceFactory类型的泛型方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL).推断类型BALL不是有界参数的有效替代

public class BallUserInterfaceFactory {
    public static <BALL extends Ball> BallUserInterface<BALL> getUserInterface(BALL ball) {

        if(ball instanceof Baseball){
            return getBaseballUserInterface(ball);
        }
        //Other ball types go here

        //Unable to create a UI for ball
        return null;
    }

    private static <BASEBALL extends Baseball> BaseballUserInterface<BASEBALL> getBaseballUserInterface(BASEBALL ball){
        return new BaseballUserInterface<BASEBALL>(ball);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道它不能保证BALL是一个棒球,因此getBaseballUserInterface方法调用中存在参数类型不匹配.

如果我在getBaseballUserInterface方法调用中转换ball参数,那么我得到错误:

类型不匹配:无法转换BaseballUserInterface<Baseball>BallUserInterface<BALL>

因为它不能保证我返回的是同一类型的BALL.

我的问题是,处理这种情况的策略是什么?

(为了完整性,这里是示例中所需的其他类)

public class Ball {

}

public class Baseball extends Ball {

}

public class BallUserInterface <BALL extends Ball> {

    private …
Run Code Online (Sandbox Code Playgroud)

java generics inheritance

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

带有类名的Java instanceof

我很好奇地问这个,也许这是毫无意义的.

当我们在java中使用instanceof时,如:

if (a instanceof Parent){ //"Parent" here is a parent class of "a"
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能使用如下:

if (a instanceof Parent.class){
}
Run Code Online (Sandbox Code Playgroud)

从严格编程的角度来看,第二个'instanceof'是否更有意义?"Parent"和"Parent.class"有什么区别?

java class instanceof

11
推荐指数
1
解决办法
1万
查看次数

如何使用getClass()来判断Object是否为数字?

我想动态地判断Java中的Object是否为数字.我的代码如下:

if(obj.getClass().equals(Number.class)) {
    attributeTypeStr = "Numeric";
} else {
    attributeTypeStr = "Non-Numeric";
}
Run Code Online (Sandbox Code Playgroud)

Object obj可以是任何数值类型,如Integer, Float, Double等,但是,当我与测试它Integer/Float/Double,则attributeTypeStr总是返回"Non-Numeric".我想这是因为Integer/Float/Double是子类NumberNumber.class不相等Double.class.我可以用类似的东西

if(obj.getClass().equals(Integer.class) || obj.getClass().equals(Float.class) || obj.getClass().equals(Double.class))
Run Code Online (Sandbox Code Playgroud)

但它看起来太冗长了.那么有一个简单的方法吗?

java reflection

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

instanceof运算符是否会产生大量开销?为什么?

我的项目中有一位同事,他深深反对instanceof运营商的使用,因为它"产生了大量的开销",原因是什么?这是真的吗?

有没有其他方法来检查对象的类型而不是使用它?

因为我发现它在某些场合非常有用.

java optimization casting

5
推荐指数
1
解决办法
6134
查看次数