- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Giả sử tôi có một lớp học đơn giản
lớp công khai MyObject {
}
Và giao diện xử lý xử lý các lớp con MyObject
giao diện công cộng MyObjectHandler{
Danh sách xử lý(Danh sách đối tượng);
}
Giả sử tôi có BigObjects và SmallObjects (cả hai đều mở rộng MyObject) và tôi muốn đặt các trình xử lý riêng cho chúng. Vì vậy, tôi đã tạo hai giao diện MyObjectHandler với các giao diện chung cụ thể.
lớp BigObject mở rộng MyObject {}
lớp SmallObject mở rộng MyObject {}
// Giao diện xử lý
giao diện BigObjectHandler mở rộng MyObjectHandler{}
giao diện SmallObjectHandler mở rộng MyObjectHandler{}
// Bộ xử lý bê tông
lớp BigHandler1 triển khai BigObjectHandler {....}
lớp BigHandler2 triển khai BigObjectHandler {....}
lớp SmallHandler1 triển khai SmallObjectHandler {....}
lớp SmallHandler2 triển khai SmallObjectHandler {....}
Bây giờ giả sử chúng ta đã tạoTóm tắtHandlerChain<...>
lớp trừu tượng Do đó, chúng ta có thể tạo lớp BigHandlerChain và đưa BigHandler vào (giống như SmallHandlerChain).
lớp BigHandlerChain mở rộng Tóm tắtHandlerChain {
// Chỉ tiêm các phần tử con của BigObjectHandler Ví dụ: qua spring @Autowired.
trình xử lý BigHandlerChain(List công khai) {
this.handlers = người xử lý;
}
}
Câu hỏi: Có thể tạo một Tóm tắtHandlerChain hoàn hảo cho tình huống này không?
lớp trừu tượng công khai HandlerChain {
trình xử lý Danh sách riêng;
public HandlerChain(List handler) {
this.handlers = người xử lý;
}
công khai Danh sách doChain(List object) {
for (Trình xử lý T: trình xử lý) {
object = handler.handle(object);
}
trả lại đồ vật;
}
}
Điều này hoạt động, nhưng trong handler.handle(object)
tôi hiểu Lệnh gọi 'xử lý (Danh sách
, vì vậy tôi nên thêm @SuppressWarnings("không được chọn")
Điều đó không tốt lắm.
lớp trừu tượng công khai HandlerChain> {
...
công khai Danh sách doChain(List object) {
for (Trình xử lý T: trình xử lý) {
object = handler.handle(object);
}
trả lại đồ vật;
}
}
không hoạt động hiện hữu handler.handle(object)
tôi hiểu xử lý (java.util.List
.Tại sao tôi không thể chuyển đối tượng cho trình xử lý trong trường hợp này? Ký tự đại diện mở rộng MyObject, V mở rộng MyObject. Không đủ?
lớp trừu tượng công khai HandlerChain, V mở rộng MyObject> {
...
Danh sách công khai doChain(List object) {
for (Trình xử lý T: trình xử lý) {
object = handler.handle(object);
}
trả lại đồ vật;
}
}
Điều này có hiệu quả, nhưng trong trường hợp này tôi nên định nghĩa BigHandlerChain là lớp BigHandlerChain mở rộng Tóm tắtHandlerChain
.NhưngTrình xử lý đối tượng lớn
đã chứa thông tin về lớp mà nó có thể xử lý được nên nó là sự trùng lặp thông tin.
lớp trừu tượng công khai HandlerChain> {
...
Danh sách công khai doChain(List object) {
for (Trình xử lý T: trình xử lý) {
object = handler.handle(object);
}
trả lại đồ vật;
}
}
Đây là giải pháp tôi mong đợi từ java nhưng nó không hoạt động! Tôi không thể khai báo lớp như thế này! ...class HandlerChain
.Tại sao tôi có thể sử dụng các ký tự đại diện đằng sau MyObjectHandler nhưng không thể sử dụng cấu trúc này?
câu trả lời hay nhất
Giải pháp một
Cái này hoạt động, nhưng trong handler.handle(objects) tôi nhận được lệnh gọi Unchecked tới 'handle(List)' với tư cách là thành viên của loại thô 'MyObjectHandler', vì vậy tôi nên thêm @SuppressWarnings("unchecked") điều đó không tốt lắm.
Thật vậy, bởi vì MyObjectHandler
là một loại chung chung, nhưng bạn đã không Chuỗi xử lý
Tham số loại chỉ định loại của nó.
Tùy chọn 2
Không hoạt động. Trong handler.handle(objects) tôi nhận được điều khiển (java.util.List>) không thể áp dụng cho (java.util.List). Tại sao tôi không thể chuyển đối tượng cho trình xử lý trong trường hợp này? MyObject và V mở rộng MyObject vẫn chưa đủ?
没有。 ? mở rộng MyObject
Về cơ bản nói rằng nó dành cho một số phần mở rộng loại không xác định đối tượng của tôi
, nhưng bạn không nói cái nào. Bạn có thể tạo một lớp lớp công khai BigHandlerChain
Nhưng cung cấp Đối tượng nhỏ
liệt kê các trường hợp để doChain
.
Lựa chọn ba
Cái này hoạt động, nhưng trong trường hợp này tôi nên định nghĩa BigHandlerChain là lớp BigHandlerChain mở rộng Tóm tắtHandlerChain Nhưng BigObjectHandler đã chứa thông tin về các lớp, có thể được nó xử lý, vì vậy đó là sự trùng lặp thông tin.
Đúng là có một số thông tin trùng lặp ở đây, nhưng đó là điều có thể xảy ra khi kết hợp các loại chung chung như thế này. do bạn doChain
Một phương thức hoạt động trên một loại và phải chỉ định loại đó có thể làm gì. Hãy nghĩ về nó như thể bạn sắp giải quyết đối tượng lớn
Danh sách và trình xử lý bạn cung cấp phải có khả năng xử lý BigObjects.
Giải pháp 4
Đây là một giải pháp mà tôi mong đợi từ java, nhưng nó không hoạt động! Tôi không thể khai báo lớp như thế này ...class HandlerChain. Tại sao tôi có thể sử dụng các ký tự đại diện sau MyObjectHandler, nhưng không thể sử dụng cấu trúc này?
问题是 V
Cho biết một loại cụ thể, thay vì ký tự đại diện, vì vậy bạn cần chỉ định V là gì.
Nói cách khác, mặc dù có một số thông tin trùng lặp nhưng giải pháp 3 của bạn là cách tiếp cận đúng. Thật không may, bạn sẽ thấy nhiều điều này hơn trong Java. Getters/setters được cho là bản soạn sẵn không cần thiết khi các từ khóa sửa đổi cụ thể trên một trường có thể đạt được hiệu quả tương tự (như trong Ruby).
Tuy nhiên, lưu ý rằng nếu bạn chỉ định lớp trừu tượng công khai HandlerChain
, bạn chỉ định chuỗi chỉ áp dụng cho một loại cụ thể MyObjectHandler
.Vì tôi nghĩ bạn có thể cần một loạt các trình xử lý khác nhau có khả năng xử lý cùng một loại đối tượng, nên tốt hơn hết bạn chỉ nên chỉ định loại đối tượng:
lớp trừu tượng công khai HandlerChain {
trình xử lý Danh sách riêng tư<>>;
public HandlerChain(List<>> trình xử lý) {
this.handlers = người xử lý;
}
Danh sách công khai doChain(List object) {
for (Trình xử lý MyObjectHandler : trình xử lý) {
object = handler.handle(object);
}
trả lại đồ vật;
}
}
Về java - kế thừa lớp: generic mở rộng chung, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/43612264/
Ví dụ đơn giản về các tham số chung của hàm đặc điểm: trait Ext: Sized { fn then(self, f: fn(Self) -> R) -
Trong đoạn mã sau, tại sao Groovy dường như bỏ qua việc khai báo kiểu chung của tham số đóng được cung cấp trong phương thức barMany: import groovy.transform.CompileStatic @CompileSt
Theo những gì tôi biết, Prolog không có bất kỳ cơ chế tích hợp nào để lập trình chung. .Generics có thể được mô phỏng bằng cách sử dụng unity, nhưng điều này đòi hỏi phải kiểm tra kiểu trong thời gian chạy: :- khởi tạo (chính): -.
Trong ứng dụng của tôi, tôi có một Board. Bảng được tạo thành từ các tế bào. Mỗi ô có một giá trị int. Có một số loại Bảng có thể được mở rộng. Mỗi loại tấm sẽ thể hiện các ô khác nhau. Ví dụ: người ta sẽ sử dụng Lis
Tôi muốn thêm các thuộc tính được lưu trữ vào các lớp con UIView như UIView, UIImageView, UIPickerView, v.v. Tôi chỉ cần tạo các phiên bản UIView từ các lớp con. Các lớp con chỉ khác nhau về loại, tất cả các thuộc tính và phương thức đều giống nhau. T
Câu hỏi này đã có câu trả lời ở đây: Bất kỳ loại và triển khai danh sách chung nào trong ngôn ngữ lập trình go (2 câu trả lời) Đã đóng 6 tháng trước.
Tôi có đoạn mã sau như được thấy trong ideone.com: import java.util.*;
Trong Swift, chúng ta có thể viết các phần mở rộng cho các mục phổ biến như Sequence: Extension Sequence Where Iterator.Element : ObservableType { } Điều này sẽ đảm bảo rằng phần mở rộng chỉ áp dụng cho
Tôi biết điều này nghe có vẻ khó hiểu, nhưng đó là cách tốt nhất tôi có thể giải thích. (Bạn có thể đề xuất một tiêu đề hay hơn). Tôi có 3 lớp:- A public class A > { ... } B public class B {
Tôi hiện đang học CS ở trường đại học và tôi mới bắt đầu học các lớp thuật toán và cấu trúc dữ liệu. Giáo sư của tôi thực sự thích (thực sự buộc chúng tôi phải) sử dụng Ada. Để thành công, tôi bắt đầu tìm kiếm một số nội dung và tìm thấy mã này mô tả cách viết một ngăn xếp chung: g
我正在玩 Scala By Example 开头的 QuickSort 示例并尝试将其调整为通用类型 A ,而不仅仅是 Int s。 到目前为止我的工作是 def sort[A new Y(i, -
Có ai có thể giải thích tại sao ví dụ thứ hai bên dưới không biên dịch được không? "Kiểm tra 2" đưa ra "Lỗi FS0670: Mã này không đủ chung. Biến loại ^a không thể được khái quát hóa vì nó sẽ vượt quá phạm vi của nó.". Tôi không thể hiểu được thông báo lỗi này. // Kiểm tra 1 kiểu
Làm cách nào để lưu trữ thuốc generic trong một TList chung được giữ bởi một đối tượng không chung chung? gõ TXmlBuilder = loại lớp TXmlAttribution= Tên lớp: Str
Tôi đang cố gắng tạo một ví dụ hoạt động tối thiểu về cách sử dụng GHC.Generics bằng cách làm theo bài viết trên wiki Đây là những gì tôi có: {-# LANGUAGE DefaultSignatures, DeriveGe.
Tôi đang cố gắng thêm chức năng get vào tuần tự hóa chung như được mô tả trong wiki. . Một số phần có vẻ đơn giản nhưng có một số chỗ tôi không biết phải viết gì và không ngạc nhiên khi tôi mắc lỗi biên dịch. Tôi đã xem qua giấy tờ gốc cũng như thực tế thực hiện trên trần
Tại sao mã này hoạt động? $v):void { print_r($v); } test(Vector {1, array("I'm an array"), 3}); Nó có báo lỗi không? Điều gì nên
Có cách nào để Rust Generic chỉ chấp nhận các kiểu nguyên thủy không? Tôi muốn lặp lại các bit trong giá trị sau và tôi biết điều này chỉ có thể thực hiện được với các kiểu nguyên thủy. struct MyStruct { my_property: T // m
Giả sử tôi có một lớp công khai đơn giản MyObject { } và một giao diện xử lý xử lý các lớp con MyObject giao diện chung MyObjectHa
Vì lý do nào đó, tôi đang gặp khó khăn trong việc triển khai các thuộc tính của giao diện chung bằng cách sử dụng lớp cơ sở chung như thế này: giao diện công cộng IParent trong đó TChild : IChild {
Tôi nhận được lỗi sau. Tôi đã tìm kiếm trên Google hơn một ngày nhưng vẫn không tìm được giải pháp cụ thể. Xin hãy cho tôi một lời khuyên: Không thể chuyển đổi ngầm định loại System.Collections.G.
Tôi là một lập trình viên xuất sắc, rất giỏi!