首先,我不是一个Java人,但我发现表面上看起来与导入工作方式不一致的东西.
假设你有一个文件,在这个文件中你有你的主要功能,你也定义的类美孚,现在不同的实现的美孚也存在于一个包.假设您要在功能中使用这两个版本.
你不能从它的包中显式导入Foo,即import mypackage.Foo;
因为这会导致与文件中本地定义的类冲突,所以在编译时会生成错误.
你可以做的是导入整个包,即导入mypackage.*;
这将起作用,您可以使用完全限定名称访问Foo,使用简单名称将导致使用本地Foo.我看到的不一致是,前者生成错误(您导入了一个类,导入的唯一目的是能够使用简单名称而不是完全限定名称),后者甚至不会导致警告.
我原本以为这两种情况都会产生一个警告,即你可能正在使用错误的类,因为它在2个地方定义,或者import语句是多余的,因为简单名称的使用将解析为本地定义的类,而不是导入的一.
所以我的问题是:是否存在以这种方式实施的潜在原因?
是的,这是一个异常情况,我明白这一点.
我在VB.NET v2工作
我有一个接口IMyInterface,这个接口实现了一个方法MyMethod.
我有一个对象MyObjectBase.该对象包含一个(相同)方法MyMethod.
1)如果现在我MyObject Inherits MyObjectBase Implements IMyInterface 需要我重新定义?(阴影,覆盖)MyMethod在MyObject课堂上?
2)如果相反,MyMethod我有一个MyEvent 事件的方法呢?
谢谢.
我终于到达了一个应用程序,它获得了用户的GPS位置,但我实现了LocationListener.它工作正常,但我需要这样做而不实现它,因为我必须做一个不实现方法的类.
我搜索了很多教程并检查了很多网站,我尝试将我的代码转换为不实现LocationListener,但我不能这样做,我测试的每件事都破坏了我的应用程序并停止获取用户的GPS位置.
请问,如果有专家对此可以转换我的代码而不使用"实现LocationListener"我将被授予他
这是要转换的代码:
public class GpsMiniActivity extends Activity implements LocationListener{
private LocationManager mLocMgr;
private TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout rl = new FrameLayout(this.getApplicationContext());
LinearLayout ll= new LinearLayout(this.getApplicationContext());
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(rl);
rl.addView(ll);
tv1=new TextView(getApplicationContext());
ll.addView(tv1);
//setContentView(R.layout.main);
mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,
500, 0, this);
}
@Override
public void onLocationChanged(Location location) {
tv1.setText("Lat " + location.getLatitude() + " Long " + location.getLongitude());
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, …Run Code Online (Sandbox Code Playgroud) 我有界面Foo
public interface Foo {
public void test();
}
Run Code Online (Sandbox Code Playgroud)
类FooChild实现了接口Foo.
public class FooChild implements Foo {
@Override
public void test() {...}
public void test2() {...}
}
Run Code Online (Sandbox Code Playgroud)
我必须在代码中的某个地方调用函数test2.
Foo f = new FooChild();
((FooChild) f).test2();
Run Code Online (Sandbox Code Playgroud)
我真的很讨厌将类接口转换为类.
所以我添加了另一个界面栏.
public interface Bar extends Foo {
public void test2();
}
public class FooChild implements Bar {
@Override
public void test() {...}
@Override
public void test2() {...}
}
Run Code Online (Sandbox Code Playgroud)
现在我将test2()调用为接口而不是类.
Foo f = new FooChild();
((Bar) f).test2();
Run Code Online (Sandbox Code Playgroud)
我可以将函数test2添加到接口Foo,但实现Foo的类太多了.
如果我添加该函数,我必须向所有实现Foo的类添加代码.
虽然我可以这样做,但实际上我没有编辑Foo的权限.
有没有更好的方法来解决这个问题?(希望没有铸造)
编辑:f作为方法参数传递.
正如乔恩所说,我应该更加具体.对困惑感到抱歉.
public void doSomething(Foo …Run Code Online (Sandbox Code Playgroud) 简单的问题:
我想写一个像这样的函数say.
但它有一个不好的功能:文件句柄.
say FILEHANDLE LIST
say FILEHANDLE
say LIST
say
Run Code Online (Sandbox Code Playgroud)
如何申报?可能吗?
PS:我找到了一个例子myopen(*;$),但这不是一回事.
PPS:我在旧的Perl版本中需要这个功能,因为它写起来很烦人print "\n"
谢谢!
我的老师给了我这个main.m,我必须编写.h和.m方法.在我的.m(非主要)文件中,我收到了来自Xcode的"不完整实现"警告.我为所有被调用的方法制定了方法,所以我无法弄清楚它为什么这么说.以下是我无法修改的代码:
#import <Foundation/Foundation.h>
#import "ChutesAndLadders.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
ChutesAndLadders *cl = [[ChutesAndLadders alloc]init];
[cl initBoard];
[cl makeChutes:10];
[cl makeLadders:10]
int chutes=0;
int ladders=0;
for(int i=0;i<cl.board.count;i++){
NSString * cell = (NSString *)[cl.board objectAtIndex:i];
int additionalSpaces = (int)[cl addToMove:cell];
if(additionalSpaces>0)
ladders++;
else if (additionalSpaces<0)
chutes++;
}
[cl printBoard];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我编码的.h,我相信它没关系:
#import <Foundation/Foundation.h>
@interface ChutesAndLadders : NSObject{
@private
NSMutableArray * board;
}
@property (readwrite, retain) NSMutableArray *board;
-(id) initBoard;
-(NSString *)addToMove: (NSString *) …Run Code Online (Sandbox Code Playgroud) 我一直在接受这个消息,我做错了什么?
data Pile a = Pile [a] deriving (Show,Eq,Ord)
flpile:: (Eq a, Eq b, Eq c) => Pile (a,(b,c))-> Pile (a,b,c)
flpile (Pile (a,(b,c)) = Pile [asocr (a,(b,c))]
asocr :: (a,(b,c)) -> (a,b,c)
asocr (a,(b,c)) = (a,b,c)
Run Code Online (Sandbox Code Playgroud) 我们知道Array对象(数组)有一个length属性,它在Java中声明为:
public final int length;
Run Code Online (Sandbox Code Playgroud)
它被声明为final,因此不需要访问器,除非创建一个新数组,否则我们不能更改length的值.
我的问题是:我很好奇Java是如何实现数组类的,以便它们能够在第一次length声明它时赋值final?
实现如何?
注意:我不是问如何更改数组的长度.我问它是如何实现的,以便可以更新最终属性的值.
我有一个向量和在plane.h中声明的对象:
extern Plane Default;
extern std::vector<Plane *>universe;
Run Code Online (Sandbox Code Playgroud)
它们在plane.cpp中定义:
Plane Default("Default");
std::vector<Plane *>universe;
Run Code Online (Sandbox Code Playgroud)
平面构造函数:
Plane::Plane(const std::string &label) {
/* check universe to ensure uniqueness */
std::cout << this << std:endl; //DEBUG CHECK to see what I push_back
universe.push_back(this); //ACTION to keep track of the planes
std::cout << universe.back() << std::endl; //DEBUG CHECK to ensure that it was stored correctly
}
Run Code Online (Sandbox Code Playgroud)
输出确认平面确实存储在矢量中.
主要:
if(universe.empty()) cout << "EMPTY UNIVERSE" << endl;
Run Code Online (Sandbox Code Playgroud)
表明向量没有保留该值.我期望Default(在plane.cpp中定义)存储在Universe中.
但是,当我从main实例化平面时,Universe会保留这些值
我想这与本地副本,范围和值传递有关,但我无法找到一种方法来实例化实现中的默认平面,以便其地址保留在向量中.
我也尝试从堆中声明向量,如下所示:
extern std::vector<Plane *> *universe;
Run Code Online (Sandbox Code Playgroud)
并定义如下:
std::vector<Plane *> …Run Code Online (Sandbox Code Playgroud) 在java 7上午使用PropertyChangeEvent类突然我发现了这个:
/**
* Returns a string representation of the object.
*
* @return a string representation of the object
*
* @since 1.7
*/
public String toString() {
StringBuilder sb = new StringBuilder(getClass().getName());
sb.append("[propertyName=").append(getPropertyName());
appendTo(sb); // <----HERE
sb.append("; oldValue=").append(getOldValue());
sb.append("; newValue=").append(getNewValue());
sb.append("; propagationId=").append(getPropagationId());
sb.append("; source=").append(getSource());
return sb.append("]").toString();
}
void appendTo(StringBuilder sb) {
}
Run Code Online (Sandbox Code Playgroud)
是什么让我发疯,为什么要打电话给这个方法appendTo()?
特别是那种方法什么都不做?
这有什么意义,我在第一眼看不到?
implementation ×10
java ×5
interface ×2
.net-2.0 ×1
android ×1
arrays ×1
c++ ×1
casting ×1
declaration ×1
events ×1
haskell ×1
import ×1
inheritance ×1
methods ×1
objective-c ×1
perl ×1
scope ×1
vb.net ×1
vector ×1
xcode ×1