- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我无法理解此编译器错误消息的要点“无法使用类型为‘(value: T)’的参数列表调用‘getValueType’对于行“if (CMFStream.getValueType(value: test) != type) {”
public func readArray<T>() -> Array<T>
{
// ...
var retval: Array<T>;
let test: T;
if (CMFStream.getValueType(value: test) != type) {
// ...
}
}
我想我不明白泛型和模板之间的区别。
最佳答案
您正在将类型为 T
的对象传递给 getValueType
。 T
是不受约束的泛型类型,这意味着在编译时它可以是范围内已知的任何类型。它有一个明确的类型,但编译器不知道那个类型是什么。 T
是它的占位符。
当它遇到使用类型为 T
的参数调用 getValueType
的行时,它会寻找满足该要求的方法。您看到的错误表明它没有找到执行此操作的方法。
这是一个最小的例子:
func foo<U>(f:U) {
bar(b:f)
}
func bar(b:Int) {
}
这失败了,因为 bar 接受一个 Int,但 foo 可以传递任何类型。
有两种方法可以解决这个问题。
方法一
使栏通用:
func bar<V>(b:V) {
}
所以如果你打电话
foo(f:1)
编译器将 U
替换为 Int
,创建:
func foo(f:Int) {
bar(b:f)
}
现在它需要一个接受 Int
的条形图,因此它将 V
替换为 Int
以给出
func bar(b:Int) {
}
现在类型是一致的,所以它可以继续。
方法二
约束U
:
protocol P {}
func foo<U:P>(f:U) {
bar(b:f)
}
这表示 U
是任何符合协议(protocol) P
的类型。所以现在我们可以这样定义 bar
:
func bar(b:P) {
}
这定义了一个 bar
接受任何符合协议(protocol) P
的内容。
现在无论占位符 U
被替换成什么,编译器都知道它符合 P
,并且总能找到一个 bar
接受符合 P
的内容。编译器可以继续。
关于swift - 无法使用类型的参数列表调用 'methodName',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623305/
大多数 ruby 开发人员都知道如何通过执行以下操作来节省几次击键: array.map(&:methodname) 而不是 array.map {|x| x.methodname } 有什么方法
这个问题在这里已经有了答案: Difference between this and base (9 个回答) 关闭 9 年前。 如果您正在从基类继承的类中编写代码,并且您想要在该基类上调用 pro
我想知道这两者之间的区别(对不起,我不知道这个主题的名称)。 我来自 C#,在那里我习惯于编写 System.data 以及 classA.MethodA。我已经发现在 Cpp 中,我需要使用::和类
我在 Blazor 中有一个组件,它接受方法作为参数。 @code { async Task> LoadS() => (await ModelServiceS.GetAllAsync()).
当做 tab 时,那个让我感到惊讶。对于断点的自动完成,它出现了相同方法的两个选项。 test::TestFoo::SendFoo(short) test::TestFoo::SendFoo(shor
我见过很多实现,其中一个类 (C1) 和这个类中的一个私有(private)方法 (M1)。我已经看到使用 this.M1 或从此类的其他方法中简单地使用 M1 来使用此方法 M1。 public c
我是Java的新手。 我在此行收到错误ABC.methodname();作为 token “方法名称”的语法错误,此 token 后应有标识符。 你们能告诉我如何解决它。 在下面提供了我的整个代码。
当我创建节点时,我试图在报告中记录我调用的方法名称。 我在ITestresult中使用getname()、Method.GetMethodName进行了尝试,但没有找到正确的方法来找出答案。 publ
因此,我正在通过为我的 native C++ 代码使用包装器类来实现一些 C++/cli 和 C# 互操作。 我似乎无法解决错误 'GetSharedData' 不受语言支持。我在网上搜索了解决方案并
在此question有一行, findViewById(R.id.go_to_play_store).setOnClickListener(this::goToPlayStore); 这一行是如何处理
我无法理解此编译器错误消息的要点“无法使用类型为‘(value: T)’的参数列表调用‘getValueType’对于行“if (CMFStream.getValueType(value: test)
我在看有关image_picker和video_player库的this文章,并且看到了下面的代码: _videoPlayerController = VideoPlayerController.fi
我看到了以下代码: mActionMode = OverviewActivity.this .startActionMode(mActionModeCallback); 我在这里看到
从 javascript 调用 WebService/C# 时出现奇怪的错误。 服务器方法“GetGoogleToken”失败。没有细节,没有堆栈跟踪。在服务器上,我设置了断点 - 一切顺利,我正在返
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visi
我正在尝试扩展 js 应用程序中的 Object 类。 方法如下: Object.prototype.safeGet = function(props, defaultValue) { conso
在研究这个问题时,大多数 SO 问题都是关于作为修复的 static 方法。 因为它不能与真正的(并且有点复杂)WebMethod 一起工作,我只是创建了一个简单的 WebMethod 来检查是否可以
我收到这个错误 Controller “classname”没有事件槽“methodname” 如果我在 fx:controller="application.MainController"> 中的应
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Advantages of using prototype, vs defining methods str
在 loadComplete 方法的以下代码中,它给了我这个错误: this.getColumnIndexByName is not a function dataGrid.prototype = {
我是一名优秀的程序员,十分优秀!