Scala代码:
class AAA[T] {
def hhh(t: T) = println(t)
}
val a: AAA[_] = new AAA()
我可以传递给a.hhh
什么?我试过了:
val b: Any = 111
a.hhh(b) // compilation error!
但它有编译错误。如果代码的第一部分无法更改,我该如何编写第二部分代码?
答案 0 :(得分:2)
你所能做的就是把它包装成类似的东西:
def ggg[T](t: T)= a.asInstanceOf[AAA[T]].hhh(t)
ggg(111) // prints 111
答案 1 :(得分:1)
好吧,如果AAA[T]
为未知类型T
,则需要T
。很明显为什么val b: Any = 111
不起作用:因为T
可以是任何东西,例如String
。 T
。
因此要传递某些内容,它必须同时包含所有类型Nothing
,因此它只能有一种类型:val b: Nothing = throw new Exception
a.hhh(b) // compiles!
。
hhh
对于此Nothing
签名,这将始终抛出异常,因为没有类型List[T]
的实际值。但是你可以通过修改它来获得更合理的东西:例如以名称取名,取Nil
(在这种情况下$cookies = tempnam( sys_get_temp_dir(), 'CDL' ); // for cURL
function getCurlData( $url, $data, $post = false, $http_build_query = false )
{
global $cookies;
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookies );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookies );
curl_setopt( $ch, CURLOPT_TIMEOUT, 40000 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt( $ch, CURLOPT_REFERER, $url );
if( $post )
{
curl_setopt( $ch, CURLOPT_POST, true );
if( $http_build_query )
{
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $data ) );
}
else
{
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
}
}
$result = curl_exec( $ch );
curl_close( $ch );
return $result;
}
可以通过),等等。