请考虑以下代码:
class A {
B[] arr = new B[10];
private class B {}
}
class C {
void fun(){
A a = new A();
Object arr = a.arr;
Object len = a.arr.length; // !! ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
正如我在代码中写的那样.a.arr.length;
给出错误.
我真的明白为什么会这样.这是因为子类B
是私有的.但仍然为什么会这样.在A类中,属性arr
是可访问的,但为什么不是它的长度.在jls或任何地方有没有任何解释.
我只想对这种行为做出明确的解释.我知道私人事物不能在同类之外访问.但公共阵列可能是.无论是什么类型.如果外面有任何东西可以访问,那么也应该访问它的公共属性.但这里没有发生.
编辑:我发现在C#中甚至不可能创建一个私有类数组.在java中如果我们无法访问任何东西,甚至无法知道私有类数组的长度那么创建私有类数组有什么用.
考虑以下数据库表:
id | is_visible
________|_______________
1 | true
2 | false
3 | -- i.e. null
Run Code Online (Sandbox Code Playgroud)
我想选择具有is_visible = null的所有行.我尝试了以下查询:
SELECT * FROM tab WHERE is_visible = null; -- 0 results
SELECT * FROM tab WHERE is_visible <> true; -- only fields with false value
SELECT * FROM tab WHERE is_visible <> false; -- only fields with true
Run Code Online (Sandbox Code Playgroud)
我在postgresql和sql server中尝试过
如何选择具有is_visible = null的行?
如果在uib-tabset中使用,则值不与作用域的变量绑定.在下面的示例中,我尝试$scope.message
进入uib-tab内部并在其外部:
angular.module("app", ["ui.bootstrap"])
.controller("myctrlr", ["$scope", function($scope){
$scope.message = "my message ";
}]);
Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js"></script>
<div ng-app="app" ng-controller="myctrlr" class="col-md-6 col-md-offset-3">
<uib-tabset>
<uib-tab heading="Static title">
<input type="text" ng-model="message" ng-change="change()" />
<br />
Inside uib-tab : {{ message }}
</uib-tab>
<uib-tab heading="Another title">
I've got an HTML heading, and a select callback. Pretty cool!
</uib-tab>
</uib-tabset>
Outside uib-tab : {{ message }}
</div>
Run Code Online (Sandbox Code Playgroud)
我声明$scope.message
并尝试将其与input
uib-tab中的元素绑定.但是当我更改它的值时,更改不会反映在uib-tab之外.
将Integer数组转换为int数组的最佳方法是什么?
它的简单解决方案是:
public int[] toPrimitiveInts(Integer[] ints) {
int[] primitiveInts = new int[ints.length];
for(int i = 0; i < ints.length; i++) {
primitiveInts[i] = ints[i] == null ? 0 : ints[i];
}
return primitiveInts;
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我采用0
了null
对象/包装器的默认值为null并且int为0这一事实的值.
但我找不到将Integer []转换为int []的简单方法.
我有一个功能界面
@FunctionalInterface
interface MyInterface {
<T> T modify(Object);
}
Run Code Online (Sandbox Code Playgroud)
我可以为这个界面创建一个匿名类
MyInterface obj = new MyInterface(){
@Override
<T> T modify(Object obj){
return (T) obj
}
}
Run Code Online (Sandbox Code Playgroud)
如何为此创建lambda表达式.
MyInterface obj -> {return (T) obj;}; // ! ERROR as T is undefined
Run Code Online (Sandbox Code Playgroud) 当我尝试 docker compose down 特定配置文件时,它会停止并删除所有容器。我只想删除引用配置文件中的容器。
docker compose --profile elk down # Let's say I have some services in elk profile
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我只想关闭带有elk
配置文件标记的服务。
看看下面的代码:
情况1 :
char a = 'x' ^ 'y';
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是当我在这里使用变量而不是常量时:
案例2:
char x = 'x';
char y = 'y';
char a = x ^ y; // Error!
Run Code Online (Sandbox Code Playgroud)
在java语言中:case 1正在工作,a的值为1,但是case 2不起作用.
在C和C++中:两种情况都有效,a的值为1
在C#中:两种情况都不起作用.
在javascript:这两种情况下都工作,这是不是一个HLL和价值一出来是0.
我知道java正在将变量转换为整数来进行二进制操作,但是为什么它在情况1中工作而不是在情况2中,为什么在C#中不起作用?为什么在javascript的情况下值不同.
更新 当我使变量最终比它在java中工作时,但仍然不在C#中
final char x = 'x';
final char y = 'y';
char a = x ^ y;
Run Code Online (Sandbox Code Playgroud)
但是我仍然不明白为什么常量工作但是当使用变量时它们不是.为什么其他高级编程语言不会发生同样的情况.
我认为这是一个基本的操作,应该在所有具有相同行为的编程语言中工作.
注意要在javascript中测试所有上述情况,我在所有情况下都将'char'替换为'var'并且它们正在工作.
无法将泛型方法的功能接口转换为lambda表达式.
以下代码正在运行.它没有lambda表达式,即使用匿名类.
public interface Pro{
public <T> void callee(T t);
}
public void fun(Pro obj){}
public void implement() {
fun(new Pro() {
@Override
public <Integer> void callee(Integer t){}
});
}
Run Code Online (Sandbox Code Playgroud)
我无法理解如何使用lambda表达式而不是匿名类.
在自己尝试之后,我使用了netbeans中显示的提示.我使用所示的灯泡来做到这一点.
这就是我得到的,一个错误.
public void implement() {
fun((Integer t) -> {
});
}
Run Code Online (Sandbox Code Playgroud)
它显示错误.这里使用的正确lambda表达式是什么?
这是错误:
one\LambdaScopeTest.java:18: error: incompatible types: invalid functional descriptor for lambda expression
fun((Integer t) -> {
^
method <T>(T)void in interface Pro is generic
where T is a type-variable:
T extends Object declared in method <T>callee(T)
Note: …
Run Code Online (Sandbox Code Playgroud) 我已经在netbeans上安装了mingw用于C编程.
然后我创建了一个文件"Myfile.c",我在其中创建了一个方法callme()
.
但是这个文件不包含main方法.
我想callme()
从另一个包含main方法的文件中调用.
myfile.c文件
#include <stdio.h>
void callme() {
printf("I am called");
}
Run Code Online (Sandbox Code Playgroud)
EntryFile.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
// How to call callme() from here OR use this method anyhow.
return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
出于某些原因,我不想创建主方法Myfile.c
.
编辑
myfile.c文件
#include <stdio.h>
void callme();
void callme() {
printf("I am called");
}
Run Code Online (Sandbox Code Playgroud)
EntryFile.c
#include <stdio.h>
int main(int argc, char** argv) {
callme();
}
Run Code Online (Sandbox Code Playgroud)
错误
"/C/MinGW/MSYS/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering …
Run Code Online (Sandbox Code Playgroud) ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
temp.add(1);
temp.add(2);
result.add(temp);
temp.remove(temp.size() - 1);
temp.add(1, 3);
result.add(new ArrayList<>(temp));
Run Code Online (Sandbox Code Playgroud)
结果是[[1,3],[1,3]],但我认为它应该是[[1,2],[1,3]],为什么?
我不希望我的jframe在任务栏中显示任何图标.基本上如果我们不指定任何IconImage
内容,那么它会显示默认图标.但在我的程序中,我不希望显示任何图标.
setUndecorated(true);
setSize(208, 58);
setImageIcon(null); // same result
Run Code Online (Sandbox Code Playgroud)
如果我将使用透明图像Icon
,即使这样,系统也会显示一个用于图标的半透明矩形.
我的问题很简单.我认为我不需要为此编码.如果有任何方法可以做到这一点,请告诉我.
可以做到的一种方法是使用JWindow
或Window
,但使用它有许多缺点,我不想这样做.
这是在线测试中向我询问的代码.考虑这段代码.
int i = -1, j = -1;
(i=0)&&(j=0);
(i++)&&(++j);
printf("%d, %d\n", i, j);
Run Code Online (Sandbox Code Playgroud)
上面的代码将打印出来
1, -1
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么输出会出现1, -1
而不是出现1, 1
.
以下程序正在打印 49
#include <stdio.h>
#define SQR(x) (x*x)
void main(void) {
int x, y; x = 5;
y = SQR(++x);
printf("y is %d\n", y);
}
Run Code Online (Sandbox Code Playgroud)
我不明白我错过了什么.
这里就是我理解它是如何可能是工作
在SQR(++x)
, ++x
将被评估为6
之后x*x
的36
应退还.
因此y = 36
,答案是49
java ×7
c ×4
arrays ×2
generics ×2
lambda ×2
angular-ui ×1
angularjs ×1
arraylist ×1
c# ×1
c++ ×1
docker ×1
expression ×1
html ×1
icons ×1
java-8 ×1
javascript ×1
jframe ×1
mingw ×1
netbeans ×1
postgresql ×1
sql ×1
sql-server ×1
swing ×1