我正在尝试编写一个集合接口库,它使用Java 8中的新默认方法语法实现标准Collection API中的大多数方法.以下是我想要的一小部分示例:
public interface MyCollection<E> extends Collection<E> {
@Override default boolean isEmpty() {
return !iterator().hasNext();
}
//provide more default overrides below...
}
public interface MyList<E> extends MyCollection<E>, List<E> {
@Override default Iterator<E>iterator(){
return listIterator();
}
//provide more list-specific default overrides below...
}
Run Code Online (Sandbox Code Playgroud)
但是,即使这个简单的例子也遇到了编译器错误:
error: interface MyList<E> inherits abstract and default
for isEmpty() from types MyCollection and List
Run Code Online (Sandbox Code Playgroud)
根据我对默认方法的理解,应该允许这样做,因为只有一个扩展接口提供了默认实现,但显然情况并非如此.这里发生了什么?有没有办法让这个做我想要的?
我有一个看起来像这样的宏:
M(id,...)
Run Code Online (Sandbox Code Playgroud)
如果有id == 0别的话,我希望它扩展到什么都没有.
这可能吗?如果是这样,怎么样?
我的第一直觉是尝试这样的事情:
#define M(id,...) M##id(__VA_ARGS__)
#define M0(...)
#define M_NOT_0(...) some_code(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
但是这里的最后一行显然是无效的,我无法找到使这种模式有效的方法.
笔记:
id是一个0到255之间的整数,但理想情况下我想避免创建256个单独的宏定义.M(id,...)宏本身不能改变.有大量 资源 建议使用高基数属性作为分区键。我的问题是,如果我做与此完全相反的操作并为所有项目提供相同的分区键值(仅通过排序键区分),从而允许我查询整个表,会发生什么?
这会导致性能和/或热分区问题吗?如果热分区未达到3000 RCU/1000 WCU,那么热分区对于自适应容量还重要吗?即便如此,如果查询均匀分布在我的排序键中会怎样?
共识似乎是我们不应该这样做,但我的问题是:为什么不呢?
partitioning primary-key amazon-web-services amazon-dynamodb
我正在使用新的Qt 3D API在计算密集的计算过程中显示3D场景.此场景仅作为对用户输入的响应而更改.但是,Qt 3D的默认行为似乎将场景的帧速率锁定为某个高常量值,在这种情况下会消耗不可接受的资源量.
有没有办法控制Qt 3D中的帧速率?理想情况下,我只想在对场景进行更改时渲染新帧,但将其降低到较小的固定值也足够了.Qt 3D文档很稀疏,我一直无法找到办法做这些事情.
编辑:我设法找到并将QRenderSettings :: OnDemand应用到我的根节点和帧图,但它似乎没有任何效果,虽然这意味着它应该,因为我使用的是Qt 5.7.对此的任何其他意见将是非常受欢迎的(即使它只是保证评论).
编辑2:安装Fraps并直接测量帧速率后,实际上场景似乎只是在应用了QRenderSettings :: OnDemand的情况下渲染帧.如果没有这个,帧速率将保持稳定的60fps,这恰好是我的屏幕刷新率.但是,无论是否显示3D窗口,程序在启用Qt 3D时都会继续消耗大量CPU时间.我开始认为这是一个与帧速率无关的独立Qt 3D问题,并且可能会相应地打开一个新问题.
这不是JavaFX的问题,但我正在尝试在JavaFX中编写一个接口来声明一个可查看的类.可查看的类意味着有一个view()方法,它返回一个表示Viewable的Node对象.到目前为止简单,但这里变得复杂.应保证返回的Node具有getViewable()方法,该方法返回它所代表的Viewable对象.我该如何做到这一点?我的第一直觉是尝试这样的事情:
interface Viewable<V extends Viewable<V>>{
<N extends Node&View<V>>N view();
}
interface View<V extends Viewable<V>>{
V getViewable();
}
Run Code Online (Sandbox Code Playgroud)
这首先出现声音,并允许类如下所示:
class ViewableObject implements Viewable<ViewableObject>{
@Override public ObjectView view(){
return new ObjectView();
}
class ObjectView extends Pane implements View<ViewableObject>{
@Override public ViewableObject getViewable(){
return ViewableObject.this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,这个类还编译:
class ViewableObject implements Viewable<ViewableObject>{
@Override public Pane view(){
return new Pane();
}
}
Run Code Online (Sandbox Code Playgroud)
Pane是一个Node,但它没有实现View,为什么这个类会编译?我认为这违反了view()方法的约定.更奇怪的是,当Pane被Object替换时,同一个类无法编译:
class ViewableObject implements Viewable<ViewableObject>{
@Override public Object view(){//complains this is not an @Override
return new Object();
}
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我对仿制药的理解有缺陷吗?我怎样才能让它按预期工作?
我觉得这应该是非常简单的,但对于我的生活,我无法弄清楚如何使用Qt 3D绘制基本线.我能够在这个主题上找到的唯一指导就是这个不起眼的视频,其中有一些原始字节缓冲区和内存操作通过几乎没有记录的类进行.
有没有更好的方法来使用我缺少的闪亮的新API?
c++ ×2
java ×2
qt ×2
qt3d ×2
3d ×1
c ×1
frame-rate ×1
generics ×1
interface ×1
java-8 ×1
partitioning ×1
primary-key ×1
qt5 ×1