我正在尝试创建一些实现特定接口的类(在本例中XYPlottable),以及一个可以处理实现该接口的任何类的方法.
到目前为止,我有以下(有效):
public interface XYPlottable {
public Number getXCoordinate();
public Number getYCoordinate();
public Number getCoordinate(String fieldName);
}
public class A implements XYPlottable {
//Implements the above interface properly
...
}
public class B implements XYPlottable {
//Implements the above interface properly
...
}
Run Code Online (Sandbox Code Playgroud)
这很好用.我还有一种方法可以尝试绘制XYPlottable的任何东西:
public static Frame createPlot(String title, String xAxisLabel, String yAxisLabel,
List<XYPlottable> points, boolean fitLine) {
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用上面的一个具体类,它抱怨有不兼容的类型:
List<A> values = _controller.getValues(tripName);
XYPlotter.createPlot("Plot A", "B", "C", values, false);
Run Code Online (Sandbox Code Playgroud)
这是确切的错误:
incompatible types
required: java.util.List<XYPlottable>
found: java.util.List<A>
Run Code Online (Sandbox Code Playgroud)
我希望我只是有一个时刻,并且遗漏了一些非常明显的东西,但也许我对如何使用接口有误解.
我目前正在做一个项目,在该项目中我试图隐藏尽可能多的关于我创建的层次结构的细节。我想这样做是为了最大限度地减少用户需要了解的有关对象的信息量(并控制他们可以对对象状态执行的操作)。此外,我使用该模式来限制应用程序可以创建的对象类型,并将其限制为从工厂创建。
然而,我遇到的主要问题是我想公开几种不同类型的接口。每个接口都有我认为不应共享的附加功能,我希望将这些接口分开。最后,我不知道将来会出现哪些新界面,但我想尝试并为它们做好准备。
Weapon:
public interface Weapon extends GameObject {
Number attack();
boolean addWeaponAttribute(WeaponAttribute attribute);
}
Run Code Online (Sandbox Code Playgroud)
Firearm:
public interface Firearm extends Weapon {
void reload(Number rounds);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是让工厂生产具有不同接口的对象的最佳方法是什么?这就是我在想“最好的”:
到目前为止,这是我一直在想的:
public static Firearm getFirearm(String firearmName) {
...
}
public static Weapon getWeapon(String weaponName) {
...
}
Run Code Online (Sandbox Code Playgroud)
public class WeaponFactory {
public static Weapon getWeapon(String weaponName) {
...
}
}
public class FirearmFactory {
public static Firearm getFirearm(String firearmName) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意接受建议和改变。这是一个灵活的项目,因此我可以随心所欲地进行更改(就项目的这一部分而言)以取得更好的结果。
另外 - …
虽然我很少再使用C了,但我一直在考虑我总是被告知的规则"如果你打电话malloc()(或new),你必须打电话free()(或delete)".它让我想知道GCC(或其他C编译器)是否尝试执行任何类型的内存并警告用户潜在的问题.我从来没有听说过,所以我怀疑情况并非如此,但我想知道.
这是我使用的例子:
#include <stdlib.h>
int main() {
int* first = malloc(sizeof(int) * 10);
int* second = malloc(sizeof(int) * 10);
int i = 0;
for (; i < 10; i++) {
first[i] = i * 2;
second[i] = i * 10;
}
free(first); /* Forgot to free second */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc -Wall free_test.c没有警告的情况下进行编译时生成了.虽然我可以看到为什么编译器无法提供完美的答案,因为您正在处理堆内存并在运行时管理它,为什么编译器似乎没有尝试提供可能存在内存泄漏的警告?
我对其中的一些想法包括:
说到点子上了
有没有办法让 Pug 将嵌入的 HTML 作为实际 HTML 的一部分包含在 Markdown 文件中,而不仅仅是纯文本?
细节
我有一个使用jstransformer-markdown-it过滤器的 Pug 模板。输入 Markdown 文件已嵌入 HTML。那个 Markdown 文件看起来像这样 ( video.md)
# Watch this video!
This video demonstrates *the power of something something*.
<iframe width="560" height="315" src="https://www.youtube.com/..." frameborder="0" allowfullscreen></iframe>
More Markdown here.
----------------
Run Code Online (Sandbox Code Playgroud)
加载此 Markdown 文件的模板如下所示 ( entry.pug)
html
include head.pug
body
header Article
div(id="main")
article
include:markdown-it video.md
Run Code Online (Sandbox Code Playgroud)
然后像这样 ( index.js)通过 Express 提供。
const express = require('express');
const app = express();
app.set('view engine', 'pug');
app.get('/', …Run Code Online (Sandbox Code Playgroud) java ×2
c ×1
gcc ×1
generics ×1
interface ×1
javascript ×1
jstransform ×1
markdown ×1
memory-leaks ×1
pug ×1