小编Mik*_*keB的帖子

为什么Guava的TypeToken <T> .getRawType()返回Class <?super T>而不是Class <T>

从Effective Java Second Edition,第28项:"不要使用通配符类型作为返回类型.它不会为用户提供额外的灵活性,而是迫使他们在客户端代码中使用通配符类型."

public final Class<? super T> getRawType()
Run Code Online (Sandbox Code Playgroud)

我刚刚掌握了通用通配符,以了解我在编写的一段代码中的最后一次未经检查的强制转换警告,我不明白为什么getRawType()返回一个通配符类型.

class Base<T>{}
class Child<T> extends Base<T>{}

public <C> void test (TypeToken<? extends Base<C>> token) {
    Class<? extends Base<C>> rawType = (Class<? extends Base<C>>) token.getRawType();
}
Run Code Online (Sandbox Code Playgroud)

我必须在返回一个时抛出token.getRawType()

Class<? super ? extends Base<C>>
Run Code Online (Sandbox Code Playgroud)

java generics guava

10
推荐指数
1
解决办法
2797
查看次数

使用自定义类型(Substrate FRAME 托盘 + Polkadot/Substrate 前端)

场景:您正在为使用 Storage 或 Events 中的自定义类型的自定义Substrate节点开发FRAME 托盘。要与您的自定义 Substrate 节点交互,请使用Polkadot/Substrate 前端

问题:

  1. 当您查询包含自定义类型的存储时,前端会返回 “unknown”作为
  2. 当您使用自定义类型提交要包含在应该导致事件发射的块中的外部变量时,Polkadot/Substrate前端似乎卡住了,同时声明外部变量已“准备好”包含在一个块中。但是,情况并非如此,如果您检查外部应包含的块,您会看到以下错误消息:

无法检索指定的块详细信息。createType(Vec):: 结构:“数据”失败:: 无法构造未知类型 YOUR_CUSTOM_TYPE

substrate polkadot-js polkadot

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

使用scala提取器作为解析器

我经常遇到我想要使用提取器作为解析器的情况,它们对此非常有用,但它看起来永远不正常,通常unapply看起来应该是一个apply.此外,解析提取器可能会妨碍默认提取器.这有什么模式吗?

case class AnID(int: Int) extends AnyVal

object AnID {
  def unapply(idString: String): Option[AnID] = "id-([0-9]+)".r match {
    case Seq(intString: String) => Try(Integer.parseInt(intString)).map(AnID.apply).toOption
    case _ => None
  }
}
Run Code Online (Sandbox Code Playgroud)

并测试:

AnID(8) should be (AnID(8))
val AnID(id1) = "id-1"
id1 should be (AnID(1))
val AnID(id2) = AnID(2)
id2 should be (2)
Run Code Online (Sandbox Code Playgroud)

这有点奇怪.

scala

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

标签 统计

generics ×1

guava ×1

java ×1

polkadot ×1

polkadot-js ×1

scala ×1

substrate ×1