我们将我们的库提供给客户,我想将一些方法标记为"已弃用",因为我们更改了它们(就像Apple在iPhone SDK中所做的那样).
我已经看到了__OSX_AVAILABLE_BUT_DEPRECATED映射到的预处理器宏__AVAILABILITY_INTERNAL,它被映射到__attribute__((deprecated))......
好吧,我对这些东西有点困惑!
有谁知道这件事?
我是 React 的新手,我正在使用最新版本的 React 学习 React 组件生命周期。我对下面部分代码的“超级”调用标有已弃用的警告。我很难理解这个,因为那里的很多文档仍然使用“超级”,而且我不确定继任者是什么,即使从反馈中链接的完整文章也是如此。有任何想法吗?谢谢。
class App extends Component {
constructor(props) {
super(props);
}
}
Run Code Online (Sandbox Code Playgroud)
这是警告:
class App extends Component {
constructor(props) {
super(props);
}
}
Run Code Online (Sandbox Code Playgroud) 根据MDN,我们绝对不应该使用.keyCode属性.它已被弃用:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
在W3学校,这个事实被淡化了,并且只有一个附注说明仅.keyCode提供兼容性,并且最新版本的DOM事件规范建议使用该.key属性.
问题是.key浏览器不支持,那么我们应该使用什么?有什么我想念的吗?
目前,有两种方法可以将代码标记为java中的depreacted.
通过JavaDoc
/**
* @deprecated
*/
Run Code Online (Sandbox Code Playgroud)
或者作为注释:
@Deprecated
Run Code Online (Sandbox Code Playgroud)
这是我的问题 - 当使用Eclipse将方法标记为已弃用时,我发现声明两者都有点太多了.我真的只想用其中一个.
但是,使用注释会给编译器提供实际有用的附加信息吗?
但是只使用注释,我无法说明为什么该方法被弃用 - 我只能用JavaDoc做到这一点,并且弃用方法而不指出为什么不好.
那么,我可以只使用其中一个吗?或者我应该真的学会指定两者?
所以我的sdk从15到21,当我打电话时setBackgroundDrawable(),Android Studio告诉我它已被弃用.
我想过用它来绕过它:
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm));
} else {
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
}
Run Code Online (Sandbox Code Playgroud)
但是,我在"setBackground()"收到错误.
那么,你会如何应对呢?
我无法弄清楚为什么LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, this);"FusedLocationApi"被淘汰并指出它已被弃用.
点击此处查看图片
import android.location.Location;
import android.location.LocationListener;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MaintainerMapActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{
private GoogleMap mMap;
GoogleApiClient mGoogleApiClient;
Location mLastLocaton;
LocationRequest mLocationRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maintainer_map2);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment …Run Code Online (Sandbox Code Playgroud) 我必须使用一个OnGlobalLayoutListener对象,然后删除监听器,我有一个问题与我用以下代码解决的弃用方法.
protected void onCreate(Bundle savedInstanceState) {
final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
ViewTreeObserver vto = llTotal.getViewTreeObserver();
if(vto.isAlive()){
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//
// mycode
//
if (Build.VERSION.SDK_INT<16) {
removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
} else {
removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
}
}
});
}
super.onCreate(savedInstanceState);
}
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeGlobalOnLayoutListener(listener);
}
@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeOnGlobalLayoutListener(listener);
}
Run Code Online (Sandbox Code Playgroud)
这是对的吗?有更好的方法来处理兼容性?
使用API 10在模拟器中运行代码我在LogCat中有以下警告
04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 …Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2005 C++编译器上,当我的代码使用fopen和此类调用时,我收到以下警告.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
我只是做了一些Haskell开发,并在新版本的GHC上重新编译了一些旧代码:
The Glorious Glasgow Haskell Compilation System, version 7.2.1
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
警告:不推荐使用-XDatatypeContexts:它被广泛认为是错误的,并且已从Haskell语言中删除.
当您拥有以下格式的代码时,会出现这种情况:
data Ord a => MyType a
= ConstructorOne a
= ConstructorTwo a a
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么这个功能首先被弃用,而我应该做些什么而不是实现相同或类似的功能呢?
VB.NET中是否有能力弃用代码?我知道在C#中有'attributes'和java中的标签; 在VB.NET中有什么类似的东西,除了留下'todo:...?
deprecated ×10
android ×3
java ×2
annotations ×1
cocoa ×1
cocoa-touch ×1
fopen ×1
function ×1
haskell ×1
javadoc ×1
javascript ×1
key ×1
keycode ×1
objective-c ×1
reactjs ×1
typescript ×1
vb.net ×1
visual-c++ ×1
xcode ×1