相关疑难解决方法(0)

确定InetSocketAddress是IPv6还是IPv4

我需要确定是否InetSocketAddress有效地使用IPv6或IPv4.我能看到的唯一两种方法是使用instanceof运算符,或者检查getAddress()(应该返回a byte[])的长度.这两个都不太理想(instanceof很慢,并且getAddress必须制作数组的副本).

还有更好的选择吗?

java

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

如何仅针对特定类型的元素进行迭代?

我有一个数组列表:

private List<GameObject> gameObjects = new CopyOnWriteArrayList<GameObject>();
Run Code Online (Sandbox Code Playgroud)

GameObject可以是3类中的一个:Spaceship,BeamAsteroid.它们都很相似所以我将它们保存在一个数组中.然而,太空飞船有另外的方法射击,在其他线程(被称为ShootRunnable)中每100ms使用一次.所以我想迭代它,Spaceship因为其他没有实现射击方法.实现这一目标的最佳方法是什么?

for (GameObject ob : gameObjects) {
  if (ob instanceof Spaceship) {
    ob.shoot();
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用上面的内容迭代它吗?只是使用演员或其他什么?请帮忙.

java oop

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

Java-将对象存储在遵循其类继承的层次结构中

我需要存储很多属于不同类的对象:

ClassA {...}
ClassA1 extends ClassA {...}
ClassA2 extends ClassA {...}
ClassA2a extends ClassA2 {...}
ClassB {...}
Run Code Online (Sandbox Code Playgroud)

现在,我需要找到一种方法来存储所有这些对象,从而使我能够有效地获取属于特定类及其继承的子类的所有对象。例如,这个假想代码

getObjects(ClassA2)
Run Code Online (Sandbox Code Playgroud)

将返回属于ClassA2或ClassA2a的所有存储对象的列表。

我相信某种树集合将是合适的,但是我想不出任何实现它的方法。有任何想法吗?


(背景:我正在创建一个简单的Java游戏,其中需要管理大量的Sprite,而其中一些Sprite具有相似的属性。当我检查碰撞等事件时,我需要获取所有扩展EnemySprite和将他们的坐标与玩家的精灵进行比较。)

java

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

如何在现代JVM实现中实现instanceof?

由于在其他线程中完成了基准测试(参见/sf/answers/27833221/),因此可以看出Java 6中的instanceof实际上非常快.这是如何实现的?

我知道对于单继承,最快的想法是使用一些嵌套间隔编码,其中每个类维持[低,高]间隔,而instanceof只是间隔包含测试,即2个整数比较.但它是如何制作接口的(因为区间包含仅适用于单继承)?如何处理类加载?加载新的子类意味着必须调整很多间隔.

java implementation jvm instanceof

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

有没有办法避免在Android中使用instanceOf?

我们都同意使用instanceOf通常不是最好的解决方案.网上有很多例子.

但是让我们考虑一下以下示例,我们需要从一个片段调用一个方法到它的活动:

public class BaseActvity extends FragmentActivity implements ISomething {
    @Override
    public void doSomething();
}
Run Code Online (Sandbox Code Playgroud)

然后假设我们在应用程序中有一个需要调用的片段doSomething():

public MyFragment extends Fragment() {

public void onCreate() {
    public void onResume() {
        Activity activity = getActivity();
        if (activity != null && activity instanceOf ISomething) {
            ISomething something = (ISomething) activity;
            something.doSomething();
        }
    }
}

public interface ISomething {
    void doSomething();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们无法保证getActivity()将返回ISomething的对象,因此我们检查类型.一个改进是添加一个接口,但我们仍然要检查getActvity()返回类型以保护我们的代码.

由于Android Framework和getActivity()调用的性质,我找不到更好的解决方案.也许有人可以帮助一些输入..

注意:我添加了一个界面来跟随访问者模式.请注意,我仍然必须使用instanceOf来确保父活动正在实现它.

谢谢 .

Gaspar de Elais

android instanceof

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

使用instanceof help和java cast类型异常是否会影响性能?

我使用遗留库,需要使用cast Object to Collection.为避免异常,我认为使用instanceof.所以问题二:1.如果我使用instanceof - 需要使用try .. catch cast异常以避免异常?2.它是否达到了性能?谢谢.

java collections object map

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

标签 统计

java ×5

instanceof ×2

android ×1

collections ×1

implementation ×1

jvm ×1

map ×1

object ×1

oop ×1