Вы также можете использовать setMinClusterSize (1);
public MyIconRendered(Context context, GoogleMap map,
ClusterManager<AbstractMarker> clusterManager) {
super(context, map, clusterManager);
setMinClusterSize(1);
}
Что Вы делаете в своем методе? Если Вы просто заполняете существующий массив, то Вам не нужна семантика передачи ссылкой - или в.NET или в Java. В обоих случаях ссылка будет передана значением - так изменения в , объект будет видим вызывающей стороной. Это похоже на сообщение кому-то адрес Вашего дома и просьбы, чтобы они поставили что-то ему - без проблем.
, Если Вы действительно хотите семантику передачи ссылкой, т.е. вызывающую сторону, будет видеть любые изменения, внесенные в сам параметр, например, установку в NULL его или ссылку на другой массив байтов, тогда или метод должен возвратить новое значение, или необходимо передать ссылку на своего рода "держателя", который содержит ссылку на массив байтов, и который может иметь (возможно измененный) ссылка, захваченная от него позже.
, Другими словами, если Ваша внешность метода любит это:
public void doSomething(byte[] data)
{
for (int i=0; i < data.length; i++)
{
data[i] = (byte) i;
}
}
тогда Вы в порядке. Если Ваш метод похож на это:
public void createArray(byte[] data, int length)
{
// Eek! Change to parameter won't get seen by caller
data = new byte[length];
for (int i=0; i < data.length; i++)
{
data[i] = (byte) i;
}
}
тогда необходимо изменить его на также:
public byte[] createArray(int length)
{
byte[] data = new byte[length];
for (int i=0; i < data.length; i++)
{
data[i] = (byte) i;
}
return data;
}
или:
public class Holder<T>
{
public T value; // Use a property in real code!
}
public void createArray(Holder<byte[]> holder, int length)
{
holder.value = new byte[length];
for (int i=0; i < length; i++)
{
holder.value[i] = (byte) i;
}
}
для получения дополнительной информации, читайте Передача параметров в C# и Передача параметров в Java. (Первый лучше записан, чем последний, я боюсь. Однажды я вернусь к выполнению обновления.)
На самом деле, в Java, эти ссылки передаются значением .
В этом случае, ссылка byte[]
объект. Любые изменения, которые влияют на сам объект, будут замечены из метода вызывающей стороны.
Однако, при попытке заменить ссылку, например, с помощью new byte[length]
, Вы только заменяете ссылку, которую Вы получили передачей значением, таким образом, Вы не изменяете ссылку в методе вызывающей стороны.
Вот интересное чтение об этой проблеме: Java является Передачей Значением Черт возьми!
<час>Вот конкретный пример:
public class PassByValue
{
public static void modifyArray(byte[] array)
{
System.out.println("Method Entry: Length: " + array.length);
array = new byte[16];
System.out.println("Method Exit: Length: " + array.length);
}
public static void main(String[] args)
{
byte[] array = new byte[8];
System.out.println("Before Method: Length: " + array.length);
modifyArray(array);
System.out.println("After Method: Length: " + array.length);
}
}
Эта программа создаст byte
массив длины 8
в main
метод, который будет звонить modifyArray
метод, где новое byte
массив длины 16
создается.
может казаться, что путем создания нового byte
массив в modifyArray
метод, что длина эти byte
массив после возврата main
метод будет 16
, однако, запуская эту программу, показывает что-то другое:
Before Method: Length: 8
Method Entry: Length: 8
Method Exit: Length: 16
After Method: Length: 8
длина эти byte
массив после возврата из modifyArray
метод возвращается к [1 117] вместо [1 118].
, Почему это?
Поэтому main
метод звонил modifyArray
метод и отправил скопированная ссылка на new byte[8]
при помощи [1 142] передача значением . Затем modifyArray
метод выбросил скопированную ссылку путем создания new byte[16]
. К тому времени, когда мы уезжаем modifyArray
, ссылка на эти new byte[16]
вне объема (и в конечном счете будет собран "мусор".) Однако main
метод все еще имеет ссылку на new byte[8]
как он только [1 144] отправили скопированную ссылку и не фактическую ссылку на ссылку.
, Который должен продемонстрировать, что Java передаст ссылку с помощью передачи значением.
передача использования Java значением для аргументов метода .
Эта статья должна выручить Вас.. http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Что касается вопроса OP, просто передайте в ссылке на байт [] массив к методу. Конечный результат был бы подобен для передачи ссылкой. Если Вы измените массив байтов, то вызывающая сторона будет в состоянии видеть, что изменения отправляют осуществление метода.
Обновление для подавления сопротивления:) => указывает на вывод
class Counter
{
private int m_count = 0;
public override string ToString()
{
return String.Format("Counter ID{0} : Value {1}", this.GetHashCode(), m_count);
}
public void Increment()
{ m_count++; }
}
class MakeAPass
{
public void PassByValueAndModify(int i)
{ i = 20; }
public void PassByRefAndModify(ref int i)
{ i = 20; }
public void PassByValueAndModify(Counter c)
{ c.Increment(); }
public void PassByRefAndModify(ref Counter c)
{ c.Increment(); }
public void PassByRefAndReassign(ref Counter c)
{
c = new Counter();
for (int i=0; i<5; ++i)
c.Increment();
}
}
static void Main(string[] args)
{
MakeAPass obj = new MakeAPass();
int intVal = 10;
obj.PassByValueAndModify(intVal);
Console.WriteLine(intVal); // => 10
obj.PassByRefAndModify(ref intVal);
Console.WriteLine(intVal); // => 20
Counter obCounter = new Counter();
obj.PassByValueAndModify(obCounter);
Console.WriteLine(obCounter.ToString()); // => Counter ID58225482 : Value 1
obj.PassByRefAndModify(ref obCounter);
Console.WriteLine(obCounter.ToString()); // => Counter ID58225482 : Value 2
obj.PassByRefAndReassign(ref obCounter);
Console.WriteLine(obCounter.ToString()); // => Counter ID54267293 : Value 5
}
Незначительные модификации reqd: Используйте хэш-код () и + к строкам concat в Counter.java...
class MakeAPass
{
public void PassByValueAndModify(int i)
{ i = 20; }
// can't be done.. Use Integer class which wraps primitive
//public void PassByRefAndModify(ref int i)
public void PassByValueAndModify(Counter c)
{ c.Increment(); }
// same as above. no ref keyword though
//public void PassByRefAndModify(ref Counter c)
// this can't be done as in .net
//public void PassByRefAndReassign(ref Counter c)
public void PassAndReassign(Counter c)
{
c = new Counter();
for (int i=0; i<5; ++i)
c.Increment();
}
}
public static void main(String args[])
{
MakeAPass obj = new MakeAPass();
int intVal = 10;
obj.PassByValueAndModify(intVal);
System.out.println(intVal); // => 10
//obj.PassByRefAndModify(ref intVal);
//System.out.println(intVal); // can't get it to say 20
Counter obCounter = new Counter();
obj.PassByValueAndModify(obCounter);
System.out.println(obCounter.ToString()); // => Counter ID3541984 : Value 1
//obj.PassByRefAndModify(ref obCounter);
//Console.WriteLine(obCounter.ToString()); // no ref. but can make it 2 by repeating prev call
obj.PassAndReassign(obCounter);
System.out.println(obCounter.ToString()); // => Counter ID3541984 : Value 1
// can't get it to say 5
}