- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通用接口(interface)来描述对输出流的访问,如下所示:
interface IOutput {
function writeInteger(aValue:Int):Void;
}
我有一个基于标准 haxe.io.BytesOutput
类的这个接口(interface)的抽象实现:
abstract COutput(BytesOutput) from BytesOutput {
public inline function new(aData:BytesOutput) {
this = aData;
}
public inline function writeInteger(aValue:Int):Void {
this.writeInt32(aValue);
}
}
虽然这个抽象真正实现了上述接口(interface),但没有直接引用接口(interface),当我尝试像这样使用它时:
class Main {
public static function out(aOutput:IOutput) {
aOutput.writeInteger(0);
}
public static function main() {
var output:COutput = new BytesOutput();
out(output); // type error
}
}
编译器抛出错误:COutput 应该是 IOutput
。我只能通过使用包装BytesOutput
并实现IOutput
的通用类来解决这个问题。
我的问题是如何向 Haxe 编译器显示抽象实现了接口(interface)。
1 Câu trả lời
bản tóm tắt can't implement interfaces因为它们是编译时特性,在运行时不存在。这与接口(interface)冲突,它们Thực ra存在于运行时并且像 Std.is(something, IOutput)
这样的动态运行时检查必须起作用。
Haxe 还有一种称为 structural subtyping 的机制。可以用作接口(interface)的替代品。使用这种方法,不需要显式的 thực hiện
声明,如果有 unifies 就足够了有一个结构:
typedef IOutput = {
function writeInteger(aValue:Int):Void;
}
很遗憾,摘要 aren't compatible with structural subtyping要么是因为它们的实现方式。
您是否考虑过使用 static extensions反而?至少对于您的简单示例,这似乎是使 writeInteger()
方法可用于任何 haxe.io.Output
的完美解决方案。 :
import haxe.io.Output;
import haxe.io.BytesOutput;
using Main.OutputExtensions;
class Main {
static function main() {
var output = new BytesOutput();
output.writeInteger(0);
}
}
class OutputExtensions {
public static function writeInteger(output:Output, value:Int):Void {
output.writeInt32(value);
}
}
您甚至可以将其与结构子类型结合起来,以便 writeInteger()
可用于任何具有 writeInt32()
方法 (try.haxe link) 的东西:
typedef Int32Writable = {
function writeInt32(value:Int):Void;
}
关于interface - 抽象如何实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54135716/
Viết một giao diện chỉ dùng để tập trung hóa các giao diện khác là một thực hành tốt hay xấu? giao diện Giao diệnA: Giao diệnB, Giao diệnC { }
Có cách nào để xác định loại cụ thể từ danh sách các giao diện tùy ý không? Tôi biết về chuyển đổi kiểu nhưng tôi muốn biết tất cả các giao diện được đáp ứng. Ví dụ, cho: loại Mover giao diện { Mo
Tôi đang cố gắng tạo một đống Fibonacci. (Chúng được đề cập nhiều lần trong lớp thuật toán mà tôi đang học và tôi muốn kiểm tra nó.) Tôi muốn heap hoạt động với bất kỳ loại nút nào, vì vậy tôi định nghĩa một giao diện Nút: gói loại nút
Đây là mã của tôi: kiểu IA giao diện { FB() IB } kiểu IB giao diện { Bar() chuỗi } kiểu A struct {
Ví dụ A: // mã giả giao diện IFoo { void bar(); } lớp FooPlatformA : IFoo { void bar() {
Việc hợp nhất phản hồi leppies sẽ biên dịch - nhưng theo tôi có một số nhược điểm, tôi muốn trình biên dịch buộc mỗi lớp con phải xác định thuộc tính Uri của riêng chúng. Mã hiện tại: [] type UriUserControl() = inh
Tôi đang xây dựng một dự án lấy một thuật ngữ từ người dùng, sau đó thực hiện tìm kiếm trên Google và trả về danh sách các tiêu đề ở định dạng json. Tôi đang sử dụng API serpwow để thực hiện tìm kiếm trên Google và cố gắng phân tích phản hồi. Nhưng lỗi tôi nhận được là:
Tôi chỉ muốn triển khai một số giao diện nhất định bên trong các giao diện khác, tôi không muốn chúng có thể được kế thừa trực tiếp bởi một lớp. Cảm ơn trước! Câu trả lời hay nhất Bạn không thể làm điều này trong C# - bất kỳ lớp nào cũng có thể triển khai bất kỳ giao diện nào mà nó có quyền truy cập
Tôi mới làm quen với Go và có một số thủ thuật mà tôi vẫn chưa thành thạo. Ví dụ, tôi có một hàm mà tôi có thể gọi như thế này: myVar.InitOperation("foo",Operator.EQUAL,"bar") myVar.Init
Tôi có một giao diện chung mô tả quyền truy cập vào luồng đầu ra, như thế này: interface IOutput { function writeInteger(aValue:Int):Void;
Tôi đang thực hiện một dự án muốn gắn mạch cảm biến quang vào máy tính thông qua một loại giao diện nào đó (tốt nhất là USB). Tuy nhiên, vì tôi là người mới nên tôi không biết nên giải quyết vấn đề này theo hướng nào. Giả sử tôi có một USB được kết nối
Bối cảnh Tôi đang cố gắng tạo một ứng dụng đơn giản để thực sự hiểu toàn bộ ngăn xếp DDD+TDD+v.v. Mục tiêu của tôi là đưa lớp kho lưu trữ DAL vào thời gian chạy một cách động. Điều này giúp các lớp dịch vụ ứng dụng và miền của tôi có thể kiểm tra được. Tôi dự định sử dụng "DI của người nghèo" để hoàn thành hiện tại
Trong Java, việc một giao diện mở rộng một giao diện khác là hoàn toàn hợp pháp. Mối quan hệ này trong UML trông giống như mối quan hệ "mở rộng" (mũi tên liền, đóng, không tô màu) hay mối quan hệ "thực hiện" (mũi tên đứt nét, đóng, không tô màu)?
Tôi muốn tạo một giao diện với các triển khai mặc định của hàm so sánh và hàm bằng nhau. Nếu tôi xóa mọi thứ khỏi kiểu IKeyable ngoại trừ thành viên Key, thì đó là một giao diện hợp lệ miễn là tôi không thêm triển khai mặc định. từ
Giao diện kép trong COM là giao diện có thể truy cập thông qua phương thức DispInterface hoặc VTable. Bây giờ ai đó có thể cho tôi biết chính xác sự khác biệt giữa hai phương pháp này là gì không? Tôi nghĩ là V
Tôi có một phương thức lớp trả về danh sách nhân viên có thể được lặp lại. Cách tốt nhất để trả về danh sách là gì? Thông thường tôi chỉ trả về một ArrayList. Tuy nhiên, theo tôi hiểu thì giao diện này phù hợp hơn với loại hoạt động này. Giao diện nào là tốt nhất để sử dụng? Ngoài ra, tại sao lại trả về giao diện (trong
Tôi muốn khởi tạo một giao diện không tĩnh bên trong từ bên ngoài lớp bao bọc. Liệu điều này có thể thực hiện được không? Hãy xem xét đoạn mã sau: shared class AOuterClass() { Integer val = 3; shared
Tôi đã viết một giao diện cho một lớp như thế này: public interface IGenericMultipleRepository { Lazy> addresses { ge
Tôi là người mới bắt đầu học UML và hiện tôi đang tạo sơ đồ trình tự và vấn đề là tôi muốn triển khai giao diện DAO dựa trên dữ liệu đầu vào của người dùng. Cách vẽ sơ đồ trình tự chính xác để triển khai giao diện. Câu trả lời hay nhất: Bạn sẽ không ở chế độ SD
Để tạo một nhóm được xác thực có điều kiện bằng cách sử dụng xác thực jsr 303, hãy chuyển lớp giao diện cho chú thích như sau: @NotEmpty (groups={UpdateValue.class}) Tôi có nhiều giao diện khác nhau
Tôi là một lập trình viên xuất sắc, rất giỏi!