小编Rya*_*ert的帖子

Java 8错误:接口继承抽象和默认

我正在尝试编写一个集合接口库,它使用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)

根据我对默认方法的理解,应该允许这样做,因为只有一个扩展接口提供了默认实现,但显然情况并非如此.这里发生了什么?有没有办法让这个做我想要的?

java interface java-8

12
推荐指数
1
解决办法
1092
查看次数

根据其参数值展开宏

我有一个看起来像这样的宏:

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,...)宏本身不能改变.
  • 不能对可扩展的最终代码做出任何假设.

c c-preprocessor

12
推荐指数
2
解决办法
321
查看次数

为什么我不应该为所有 DynamoDB 项目提供相同的分区键值?

大量 资源 建议使用高基数属性作为分区键我的问题是,如果我做与此完全相反的操作并为所有项目提供相同的分区键值(仅通过排序键区分),从而允许我查询整个表,会发生什么?

这会导致性能和/或热分区问题吗?如果热分区未达到3000 RCU/1000 WCU,那么热分区对于自适应容量还重要吗?即便如此,如果查询均匀分布在我的排序键中会怎样?

共识似乎是我们不应该这样做,但我的问题是:为什么不呢?

partitioning primary-key amazon-web-services amazon-dynamodb

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

如何在Qt 3D中控制帧速率?

我正在使用新的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问题,并且可能会相应地打开一个新问题.

c++ 3d qt frame-rate qt3d

8
推荐指数
1
解决办法
1177
查看次数

在Java返回类型中强制执行多个通用边界

这不是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)

这里发生了什么?我对仿制药的理解有缺陷吗?我怎样才能让它按预期工作?

java generics

5
推荐指数
1
解决办法
348
查看次数

如何在Qt3D中绘制一条简单的线?

我觉得这应该是非常简单的,但对于我的生活,我无法弄清楚如何使用Qt 3D绘制基本线.我能够在这个主题上找到的唯一指导就是这个不起眼的视频,其中有一些原始字节缓冲区和内存操作通过几乎没有记录的类进行.

有没有更好的方法来使用我缺少的闪亮的新API?

c++ qt qt5 qt3d

5
推荐指数
1
解决办法
2854
查看次数