相关疑难解决方法(0)

接受两种类型之一的泛型类

我想创建一个这种形式的泛型类:

class MyGenericClass<T extends Number> {}
Run Code Online (Sandbox Code Playgroud)

问题是,我想接受T为Integer或Long,但不是Double.所以只有两个可接受的声明是:

MyGenericClass<Integer> instance;
MyGenericClass<Long> instance;
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

java generics

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

Java泛型参数绑定到任何类型的任何一种

是否存在将泛型类型参数约束到任何类型的语法或解决方法?

我知道您可以将类型约束为所有类型(即AND逻辑):

public class MyClass<T extends Comparable<T> & Serializable> { } // legal syntax
Run Code Online (Sandbox Code Playgroud)

是否有OR逻辑版本,即这样的东西:

public class MyClass<T extends Comparable<T> | Serializable> { } // illegal syntax
Run Code Online (Sandbox Code Playgroud)

如果没有支持这种语法的语法(我认为没有),是否有一种解决方法或方法是一个好的模式?

对于某些上下文,一个示例用例可能是:

/** @return true if the obj is either has the same id, or if obj is the same as id */
public <T extends MyClass | String> boolean sameAs(T obj) {
    if (obj instanceof String) return this.id.equals(obj);
    if (obj instanceof MyClass) return this.id.equals(((MyClass)obj).id); …
Run Code Online (Sandbox Code Playgroud)

java generics polymorphism

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

为什么不在OOP设计中使用instanceof运算符?

已经反复说过,除了equals()方法之外,不应该使用instanceof运算符,否则它是一个糟糕的OOP设计.

有人写道,这是一个繁重的操作,但似乎,至少java,处理得相当好(甚至比Object.toString()比较更有效).

有人可以解释,或指导我一些文章,解释为什么这是一个糟糕的设计?

考虑一下:

Class Man{
  doThingsWithAnimals(List<Animal> animals){
    for(Animal animal : animals){
      if(animal instanceOf Fish){
        eatIt(animal);
      }
      else if(animal instanceof Dog){
        playWithIt(animal);
      }
    }
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

决定如何处理动物,取决于男人.男人的欲望也可能偶尔改变,决定吃狗,玩鱼,而动物不会改变.

如果您认为instanceof运算符不是正确的OOP设计,请告诉您如何在没有instanceof的情况下执行此操作,为什么?

谢谢.

oop instanceof

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

标签 统计

generics ×2

java ×2

instanceof ×1

oop ×1

polymorphism ×1