我尝试将代码保持为尽可能通用,这仅代表 基本设置。我是一名Java初学者,试图理解接口,类 和方法。我确实更改了接口名称和类名称以进行引用 他们更容易。我完全清楚这段代码不会编译。 我试图理解这个概念。
给定是一个接口,具有现有的InterfaceClass和另一个类 使用界面。
接口
public interface IInterface extends Comparable<IInterface>{
String getContent() throws DumbException;
}
类别:
public class InterfaceClass implements IInterface{
public String getContent() throws DumbException {
// here I would need a parameter (filepath) to get a file
// and read its content and return the content as string
// however the interface doesn't provide a parameter for this
// method. So how is this done?
}
}
使用该方法的类:
public class Frame extends AbstractFrame {
public void setDetails(IInterface details) {
// This is the call I don't understand...
details.getContent();
}
}
我不明白的部分是: 详细信息对象如何为 getContent()提供任何参数? 我的意思是我甚至没有看到除了 IInterface细节
之外定义这个对象答案 0 :(得分:1)
您可以将override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.allowsMultipleSelection = true
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let selectedRows: [NSIndexPath] = self.collectionView.indexPathsForSelectedItems()!
for selectedRow: NSIndexPath in selectedRows {
if (selectedRow.section == indexPath.section) && (selectedRow.row != indexPath.row) {
self.collectionView.deselectItemAtIndexPath(selectedRow, animated: false)
}
}
}
重新定义为
IInterface
用法是
public interface IInterface extends Comparable<IInterface>{
String getContent(String filepath) throws DumbException;
}
public class InterfaceClass implements IInterface{
public String getContent(String filepath) throws DumbException {
// use filepath to get the file's content
}
}
您无法更改public class Frame extends AbstractFrame {
public void setDetails(IInterface details) {
details.getContent("/path/to/some/folder");
}
}
,但可以向IInterface
添加构造函数
InterfaceClass
用法是
public class InterfaceClass implements IInterface{
private String filepath;
public InterfaceClass(String filepath) {
this.filepath = filepath;
}
public String getContent() throws DumbException {
// use filepath to get the file's content
}
}
答案 1 :(得分:0)
您可以在基类
中的构造函数中传递数据public class InterfaceClass implements IInterface{
private String data;
public InterfaceClass(String data) {
this.data = data;
}
public String getContent() throws DumbException {
//do something here with data
// here I would need a parameter (filepath) to get a file
// and read its content and return the content as string
// however the interface doesn't provide a parameter for this
// method. So how is this done?
}
}
您现在可以使用此课程:
IInterface myNewClass = new InterfaceClass("blablabla");
frameClass.setDetails(myNewClass);
并将其传递给第二堂课。
答案 2 :(得分:0)
public interface IInterface extends Comparable<IInterface>{
String getContent() throws DumbException;
}
public class InterfaceClass implements IInterface{
public String getContent() throws DumbException {//this method is of string type so you must provide return type
return "some details";
}
}
public class Frame extends AbstractFrame {
public void setDetails(IInterface details) {
System.out.println(details.getContent()); //output:- some details
}
}
public class SomeClass{
public void someMethod(){
new Frame().setDetails(new InterfaceClass)
}
}
请在此处注明SomeClass
。在SomeClass
,您正在传递object
扩展类interfaceClass
(这是ploymorphism
)。
和你一样,你需要将对象传递给interface
变量,如IInterface details=new InterfaceClass()
或一些任何其他实现IInterface but note that the class must extend that
IInterface and in your case it is
interfaceClass` <的类。 /强>
如果你没有这样做,它将抛出nullpointerExecption
,因为它只是一个引用变量,所以你需要用该方法传递实际类的对象,而ploymorphism将处理休息。
注意这是访问子类的常用方法,并提供松散耦合,如果您将使用spring,您会更清楚。
希望有所帮助