假设我有一个界面
interface Foo<T> {
void foo(T x);
T bar()
}
Run Code Online (Sandbox Code Playgroud)
以及具有未知参数的此类对象:Foo<?> baz.然后我可以打电话baz.foo(baz.bar()).
但是,现在我需要将值baz.bar()放入集合中,baz.foo()稍后再调用它.就像是
List<???> list; // can I tell the compiler this is the same type as baz's wildcard?
list.add(baz.bar());
...
baz.foo(list.get(1));
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
List<Object> list;
list.add(baz.bar());
...
baz.foo((???) list.get(1)); // I can't write down the type I need to cast to
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
编辑:以上是从我的实际情况过分简化.说我们有
class Bar {
private final Foo<?> foo;
private List<???> list; // the type argument can be selected freely
Bar(Baz …Run Code Online (Sandbox Code Playgroud) 在我目前的应用程序中,我在几个地方遇到了这种模式:我在一个捆绑包中有两个服务接口,它们执行不同但相关的工作.
interface Service1 { ... }
interface Service2 { ... }
Run Code Online (Sandbox Code Playgroud)
并希望单独的组件实现两者,但找到每个需要对另一个的引用:
public class Service1Impl implements Service1 {
private Service2 service2;
...
}
public class Service2Impl implements Service2 {
private Service1 service1;
...
}
Run Code Online (Sandbox Code Playgroud)
三个OSGi组件模型中的哪一个(DS,Blueprint和iPOJO)允许这样:1)何时Service1Impl和Service2Impl在同一捆绑中; 2)当他们在不同的捆绑?
当我调试Xtend代码时,我有时希望看到生成的Java代码包含所有中间变量.但是,即使我在此代码中设置了断点,调试器也会显示Xtend代码.在这种情况下是否可以切换到Java代码?
我该怎么做相同的
SELECT *, id=1 AS calc_column FROM table
Run Code Online (Sandbox Code Playgroud)
在科尔马?(显然,id=1这只是一个简单的例子).
我想写一个返回类型依赖于参数的宏.简化示例:
def fun[T](methodName: String) = macro funImpl[T]
def funImpl[T: WeakTypeTag](c: Context)(methodName: c.Expr[String]): /* c.Expr[T => return type of T.methodName] */ = {
// return x => x.methodName
}
Run Code Online (Sandbox Code Playgroud)
显然,退出的退货类型funImpl是非法的.我试过简单地返回一个Tree,但这会产生一个错误:
[error] macro implementation has wrong shape:
[error] required: (c: scala.reflect.macros.Context): c.Expr[Any]
[error] found : (context: scala.reflect.macros.Context): context.Tree
[error] type mismatch for return type: c.universe.Tree does not conform to c.Expr[Any]
[error] def fun[T] = macro PrivateMethodMacro.funImpl[T]
[error] ^
Run Code Online (Sandbox Code Playgroud)
有可能写这样的宏吗?显然,如果将返回类型作为另一个类型参数传递,则可能会在回答中编写一个scala宏,其返回类型取决于参数?但这不是我想要的.
当我在特定图表上运行 Graphviz 时,我得到
aromanov@ws:~/IdeaProjects/scalan$ dot -v -O -Tpng myfile.dot
dot - graphviz version 2.26.3 (20100126.1600)
Activated plugin library: libgvplugin_pango.so.6
Using textlayout: textlayout:cairo
Activated plugin library: libgvplugin_dot_layout.so.6
Using layout: dot:dot_layout
Using render: cairo:cairo
Using device: png:cairo:cairo
The plugin configuration file:
/usr/lib/graphviz/config6
was successfully loaded.
render : cairo dot fig gd map ps svg tk vml vrml xdot
layout : circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
textlayout : textlayout
device : canon cmap cmapx cmapx_np dot eps …Run Code Online (Sandbox Code Playgroud) Shapeless允许多态函数中的特定于类型的情况.是否有某种方法可以与类型成员实现相同,并获得道德等同
type Foo[T] = T match {
case Int => ...
case List[A] => ...
}
Run Code Online (Sandbox Code Playgroud)
?
我有一个SQLite3的自定义构建/somepath,所以/somepath/.libs包含libsqlite3.so.0.8.6和它的符号链接.我想把一个程序与它联系起来并假设
g++ -O3 -g -fPIC -I /somepath -I /somepath/src -L /somepath/.libs -lsqlite3 -o myfile.so myfile.cpp
Run Code Online (Sandbox Code Playgroud)
会工作.它编译,但由于我的代码中的一些问题我得到了分段错误,并且在尝试调试时遇到了看起来像LD_PRELOAD不能使用我的程序的问题而设置我的lib for LD_PRELOAD使得一些进程产生加载器错误:I可以运行LD_PRELOAD=myfile.so /somepath/sqlite3 ...,但在GDB下我得到符号查找错误并LD_DEBUG=all LD_PRELOAD=myfile.so gdc -c core /somepath/sqlite3 ...显示符号被查找/usr/lib/x86_64-linux-gnu/libsqlite3.so.0而不是/somepath/libsqlite3.so.0,并且毫不奇怪地错过了自定义构建中添加的函数的符号.我该如何解决这个问题并调试我的代码?
根据C++标准,something.operator=(somethingElse)和之间会有区别something = somethingElse吗?
第一个出现在模板中T& something,我想知道用更易读的第二个版本替换它是否安全.
Clang(和 GCC)编译错误可能伴随着如何修复它们的建议:“Fix-it Hints”。Clang(或者另一个 LLVM 工具)是否有一个选项可以应用这些提示?我在https://clang.llvm.org/docs/UsersManual.html 中没有看到。显然,这样的程序可以使用-fdiagnostics-parseable-fixits; 这不是我要问的。